魔法(プログラミング)

フリー百科事典ウィキペディアより
ナビゲーションにジャンプ 検索にジャンプ

コンピューター プログラミングのコンテキストでは、魔法は抽象化を表す非公式の用語です複雑なタスクを処理するコードを記述し、その複雑さを隠して単純なインターフェイスを提示するために使用されます。この用語はやや皮肉であり、コードの真の動作がすぐには明らかにならないことを意味する、悪い意味合いを持っていることがよくあります。たとえば、Perlポリモーフィック タイピングおよびクロージャメカニズムは、「魔法」と呼ばれることがよくあります。この用語は、黒魔術や深層魔術とは対照的に、隠された複雑さが少なくとも原則として理解できることを意味します (バリアントを参照)。)、故意に隠されている、または非常に理解しにくい難解なテクニックについて説明しています。ただし、この用語は愛情を込めて適用することもでき、コードの「魅力」を示唆しています。このような抽象化のアクションは、「自動的に」と「魔法のように」 かばん語である「自動的に」行われると説明されています。

参照不透明度

「マジック」とは、他のモジュール、メモリ位置、または想定されていないグローバル変数にアクセスすることによって、明確に提供されていないデータに基づいて計算を行うプロシージャを指します(つまり、それらは参照透過的ではありません)。最新のソフトウェア アーキテクチャ モデルによると、構造化プログラミングを使用する場合でも、通常は、同じ引数が渡されるたびに各関数を同じように動作させることが好まれます。これにより、関数型プログラミングの基本原則の 1 つに従います。関数がこの規則を破ると、「魔法」が含まれているとよく言われます。

ネガティブ マジックの簡単な例は、 PHPの次のコードです

function  magic () 
{
    グローバル $somevariable ;

     $somevariableをエコーし​​ます。
}

$somevariable  =  true ;

魔法();

上記のコードは明確で保守しやすいものですが、大規模なプロジェクトで見た場合、関数magic()がどこから値を取得するのかを理解するのが難しいことがよくあります。次の概念を使用してそのコードを記述することをお勧めします。

function  noMagic ( $myvariable ) 
{ 
    echo  $myvariable ; 
}

$somevariable  =  true ;

noMagic ( $somevariable );

非直交性

どの SV [スカラー値] も魔法のように見えるかもしれません。つまり、通常の SV にはない特別な機能があります。

—  Larry Wallperlgutsマニュアルページ、[1] Perl 5

このマジックまたはマジカルの定義は、データ型、コード フラグメント、キーワード、または他の同一のオブジェクトによって共有されないプロパティを持つマシン アドレスに拡張できます。魔法の特性は、文書化されている場合とされていない場合があります。

  • ISO Cでは、アドレス[2]がマジックである可能性があるため、ファイル ハンドル (タイプFILE) を安全にコピーすることはできません。つまり、ランタイム環境は、元のファイル ハンドルをハードコードされたアドレス範囲に配置し、別のアドレスでユーザーが作成したコピーにファイル ハンドルの動作を提供しない場合があります。したがって、標準ライブラリ ルーチンは、代わりに 型のファイル ハンドルへのポインタを受け入れます。FILE *
  • Perl 5 では、ステートメントは<file_handle>によってファイルから読み取られた行を変数に暗黙的に割り当て、関数を式に適用して、正常に読み取られた文字列 (または空の文字列) がtrueとして評価され、ループを続行します。これは<file_handle>以外の場所や他の制御式では発生しません。[3]while(<file_handle>)$_defined()"0"while()while()
  • エミュレーター、特に開発中のエミュレーターでは、エミュレートされたマシンのシステムコールポイントが魔法のように見える場合があります。それらが呼び出されると、エミュレーターは、利便性、速度、または物理ハードウェアへのアクセスのためにネイティブ コードを実行し、元のコードを実行したかのようにエミュレートされた CPU とメモリをセットアップします。
    • たとえば、BBC BASIC Vのステートメントは、 Acorn MOSのシステム コール アドレスを魔法のように扱います。これらのアドレスで ARM コードに分岐しようとする代わりに、システム コールに相当するRISC OSでソフトウェア割り込みを発生させます。[4] [非一次ソースが必要]その効果は、アセンブリ言語を含まない 8 ビットの BASIC プログラムが変更なしで実行できるように、Acorn MOS を十分にエミュレートすることです。CALL
  • また、BBC BASIC では、数値変数が印刷フォーマットを制御するだけでなく、ANSI printfフォーマット文字列の直接割り当て (通常はタイプの不一致エラー)を受け入れます。[4]@%
  • JavaScriptではtypeof、オペランドが宣言されていない識別子である場合、演算子の評価は成功し、通常はReferenceError.
  • コードに影響を与えるコメントはすべて魔法です。
  • この意味では、メモリ マップド I/Oアドレスと揮発性変数も魔法のようなものですが、この用語は通常は使用されません。

バリアント

ディープ マジックとは、広く知られていないテクニックを指し、意図的に秘密にされている可能性があります。近年、そのような技術の数はほぼ間違いなく減少している[いつ? ]特に暗号の分野では、不明瞭によるセキュリティがますます放棄され、公の精査を可能にし、しばしば奨励する設計によるセキュリティが支持されています. 専門用語ファイルでは、難解な理論的知識に基づくコードを指すディープ マジックと、機能しているように見えても理論的な説明が欠けている技術に基づくコードを指すブラック マジックを区別しています[5] 。また、重い魔術、特定のハードウェアまたはソフトウェアの曖昧または文書化されていない複雑さに 基づくコードを指します。

も参照

参考文献

  1. ^ "perlguts – perldoc.perl.org" . 2014 年 10 月 5 日2015年2月18日閲覧
  2. ^ バナハン、マイク; ブレイディ、デクラン。ドラン、マーク(1991)。「9.10.3ヘッダーファイル」. The C book: ANSI C 標準を特集しています。命令セット (第 2 版)。イギリス、ウォーキンガム: Addison-Wesley Publishers。p。234.ISBN _stdio.h 0-201-54433-4. これらのオブジェクトをプログラム内でコピーするのは安全ではありません。時々それらのアドレスは「魔法」かもしれません。
  3. ^ "perlop – perldoc.perl.org" . 2010 年 9 月 7 日2011年2月17日閲覧
  4. ^ a b 「27.キーワード」(PDF) . BBC BASIC リファレンス マニュアル(第 1 版)。イギリス、ケンブリッジ: Acorn Computers。1992 年 10 月。pp. 229、349。ISBN  1-85250-103-0. 2007年 5 月 9 日閲覧デッドリンク
  5. ^ 「ディープマジック」 . 専門用語ファイル.
「 https://en.wikipedia.org/w/index.php?title=Magic_ (プログラミング)&oldid=1095093755 」から取得