セマンティクスの違いとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > セマンティクスの違いの意味・解説 

セマンティクスの違い

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:59 UTC 版)

クロージャ」の記事における「セマンティクスの違い」の解説

言語ごとにスコープセマンティクス異なるように、クロージャの定義も異なっている。汎用的な定義では、クロージャ捕捉する環境」とは、あるスコープすべての変数束縛集合である。しかし、この変数束縛というものの意味言語ごとに異なっている。命令型言語では、変数は値を格納するためのメモリ中の位置束縛される。この束縛変化せず束縛され位置にある値が変化するクロージャ束縛捕捉しているので、そのような言語での変数への操作は、それがクロージャからであってもなくとも、同一メモリ領域に対して実行される。例として、ECMAScript取り上げると var f, g;function foo(){ var x = 0; f = function() { x += 1; return x; }; g = function() { x -= 1; return x; }; x = 1; console.log(f()); // "2"}foo();console.log(g()); // "1"console.log(f()); // "2" 関数 foo2つクロージャローカル変数 x に束縛され同一メモリ領域使用していることに注意一方多く関数型言語例えML、は変数直接、値に束縛する。この場合一度束縛され変数の値を変える方法はないので、クロージャ間で状態を共有する要はない。単に同じ値を使うだけである。 さらに、Haskellなど、遅延評価を行う関数型言語では、変数将来計算結果束縛される。例を挙げるfoo x y = let r = x / y in (\z -> z + r)f = foo 1 0main = do putStr (show (f 123)) r は計算 (x / y) に束縛されており、この場合は0による除算である。しかしながらクロージャ参照しているのはその値ではなく計算であるので、エラークロージャ実行され実際にその束縛使おう試みたときに現れるさらなる違い静的スコープである制御構文C言語風の言語における returnbreakcontinue などにおいて現れるECMAScriptなどの言語では、これらはクロージャ毎に束縛され構文上の束縛隠蔽する。つまり、クロージャ内からの returnクロージャ呼び出したコード制御を渡す。しかしSmalltalkでは、このような動作トップレベルでしか起こらずクロージャ捕捉される。例を示して、この違い明らかにする。 "Smalltalk"foo | xs | xs := #(1 2 3 4). xs do: [:x | ^x]. ^0bar Transcript show: (self foo) "prints 1" // ECMAScriptfunction foo() { var xs = new Array(1, 2, 3, 4); xs.forEach(function(x) { return x; }); return 0;}print(foo()); // prints 0 Smalltalkにおける ^ はECMAScriptにおける return にあたるものだと頭に入れれば、一目見た限りではどちらのコードも同じことをするように見える。違いは、ECMAScriptの例では returnクロージャ抜けるが関数 foo抜けずSmalltalkの例では ^ はクロージャだけではなくメソッド foo をも抜ける、という点である。後者特徴はより高い表現力もたらすSmalltalkの do: は通常のメソッドであり、自然に制御構文が定義できている。一方ECMAScriptでは return の意味変わってしまうので、同じ目的には foreach という新し構文導入しなければならない。 しかし、スコープ越えて生存する継続には問題もある。 foo ^[ x: | ^x ]bar | f | f := self foo. f value: 123 "error!" 上の例でメソッド foo返すブロック実行されたとき、foo から値を返そうとする。しかし、foo呼び出しは既に完了しているので、この操作エラーとなる。

※この「セマンティクスの違い」の解説は、「クロージャ」の解説の一部です。
「セマンティクスの違い」を含む「クロージャ」の記事については、「クロージャ」の概要を参照ください。

ウィキペディア小見出し辞書の「セマンティクスの違い」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「セマンティクスの違い」の関連用語

セマンティクスの違いのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



セマンティクスの違いのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのクロージャ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS