複雑な例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:58 UTC 版)
もっと複雑な例を挙げる。実際に用いられている名前修飾を見てみよう。GNU GCC 3.xは次のクラス例をどのように修飾するだろうか。修飾されたシンボルはそれぞれの識別子の下に表示されている。 namespace wikipedia { class article { public: std::string format (void); ''/* = _ZN9wikipedia7article6formatEv */'' bool print_to (std::ostream&); ''/* = _ZN9wikipedia7article8print_toERSo */'' class wikilink { public: wikilink (std::string const& name); ''/* = _ZN9wikipedia7article8wikilinkC1ERKSs */'' }; };} ここでの名前修飾スキームは比較的単純である。修飾された名前は全て _Z で始まる。下線に大文字を続けたものはCおよびC++では予約語であることに注意されたい。従って、ユーザの識別子とぶつかることはない。ネストされた名前は(名前空間、クラス両者)、Nをつけ、次いで <長さ,id> のペアをつけて示す(「長さ」は次の識別子の長さ)。最後にEを付ける。例えば、wikipedia::article::formatは _ZN·9wikipedia·7article·6format·E となる。 関数の場合は、続いて型情報が付加される。format()は void 関数なので、単にvを付ける。よって、 _ZN·9wikipedia·7article·6format·E·v となる。 print_toの場合は、標準的な型として std::ostream (あるいは、もっと正確には std::basic_ostream<char, char_traits
※この「複雑な例」の解説は、「名前修飾」の解説の一部です。
「複雑な例」を含む「名前修飾」の記事については、「名前修飾」の概要を参照ください。
複雑な例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/11 07:59 UTC 版)
「JavaScript」の記事における「複雑な例」の解説
以下のサンプルコードは、様々なJavaScriptの機能を示したものである。 "use strict"; // strictモードの宣言/* 2つの数値の最小公倍数を求める */function LCMCalculator(x, y) { // コンストラクタ関数 const checkInt = (x)=> { // 入れ子の関数 if (x % 1 !== 0) { throw new TypeError(x + " is not an integer"); // 例外のスロー } return x; }; // 行末のセミコロンは省略可能な場合があるが、省略は推奨されない。 this.a = checkInt(x) this.b = checkInt(y);}// オブジェクトのプロトタイプはコンストラクタ関数の prototype プロパティに格納するLCMCalculator.prototype = { // オブジェクトリテラル constructor: LCMCalculator, // このようにプロトタイプを上書きする場合は、 // constructorプロパティにコンストラクタ関数名を再指定する gcd: function () { // 最大公約数を計算するメソッド // 「ユークリッドの互除法」アルゴリズムで計算 let a = Math.abs(this.a), b = Math.abs(this.b); if (a < b) { // 変数の入れ替え const t = b; b = a; a = t; } while (b !== 0) { const t = b; b = a % b; a = t; } // 最大公約数の計算は一度でよいため、自分自身を計算済みの結果を返すメソッドで再定義(上書き)する。 // (これにより LCMCalculator.prototype.gcd の代わりに this.gcd が呼ばれるようになる。 // ただし、計算後にプロパティ a や b が変更されてしまうと、結果は誤りとなる。) // なお 'gcd' === "gcd", this['gcd'] === this.gcd である。 this['gcd'] = function () { return a; }; return a; }, lcm : function () { // 最小公倍数を計算するメソッド // 変数名は、オブジェクトのプロパティと衝突しない。例)lcm は this.lcm とは異なる。 // 以下では、浮動小数の精度の問題を避けるために this.a * this.b としていない。 const lcm = this.a/this.gcd()*this.b; // 最小公倍数の計算も一度でよいため、自分自身を計算済みの結果を返すメソッドで再定義(上書き)する。 this.lcm = function () { return lcm; }; return lcm; }, toString: function () { // toStringはオブジェクトを文字列に変換するときに呼ばれるメソッド。 // テンプレート文字列により文字列中に値を埋め込むことができる。 return `LCMCalculator: a = ${this.a}, b = ${this.b}`; }};// 汎用の出力関数の定義。この実装はWebブラウザ上でのみ動作する。function output(x) { document.body.appendChild(document.createTextNode(x)); document.body.appendChild(document.createElement('br'));}// 無名関数はさまざまな書き方が可能[[25, 55], [21, 56], [22, 58], [28, 56]].map(([a, b])=> new LCMCalculator(a, b)) // 配列リテラル + マッピング関数.sort((a, b)=> a.lcm() - b.lcm()) // 指定した比較関数を用いたソート.forEach(obj=> { output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());}); 上記コードをウェブブラウザ上で実行すると、以下の結果が表示される。 LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638
※この「複雑な例」の解説は、「JavaScript」の解説の一部です。
「複雑な例」を含む「JavaScript」の記事については、「JavaScript」の概要を参照ください。
複雑な例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/12/10 09:59 UTC 版)
IBM System/360は、1964年に発売された互換性のある一連のコンピュータで、その多くはマイクロプログラミングされていた。 System/360モデル40は、複雑なマイクロシーケンスを持つマイクロプログラムマシンの良い例である。 マイクロストアは、水平マイクロプログラミングスタイルで動作する4,096個の56ビット・マイクロ命令で構成されている。 ストアのアドレスは、12ビットのリードオンリー・アドレスレジスタ(ROAR)によって指定される。 S/360アーキテクチャのほとんどのレジスタとは異なり、ROARのビットは右のビット0から左のビット11までの番号が付けられている。 +------------+ | ROAR | +------------+ 11 0 モデル40は、マイクロ命令の逐次実行を行わないので、マイクロシーケンサは、従来の意味では実際に分岐しない。 代わりに、各マイクロ命令は、次に実行されるマイクロ命令のアドレスを指定する。 マイクロ命令内の4つのフィールドが新しいアドレスに寄与する。 CA, 4 bits: 他のフィールドに応じ、次のアドレスの一部。 CB, 4 bits: 次のアドレスのビット1を決定する。 CC, 4 bits: 次のアドレスのビット0を決定する。 CD, 2 bits: 次のアドレスがどのように組み立てられるかを制御する(CBフィールドが15を含む場合を除く)。 これらのフィールドには、基本的に3つの組み合わせ、またはフォーマットがある。
※この「複雑な例」の解説は、「マイクロシーケンサ」の解説の一部です。
「複雑な例」を含む「マイクロシーケンサ」の記事については、「マイクロシーケンサ」の概要を参照ください。
Weblioに収録されているすべての辞書から複雑な例を検索する場合は、下記のリンクをクリックしてください。

- 複雑な例のページへのリンク