翻訳と辞書
Words near each other
・ 最小肺胞内濃度
・ 最小肺胞濃度
・ 最小自乗法
・ 最小致死線量
・ 最小致死量
・ 最小致死量(毒物の)
・ 最小致死量(毒物の):低脂肪食
・ 最小血圧
・ 最小視角
・ 最小記述長
最小評価
・ 最小説
・ 最小費用の原理
・ 最小距離復号
・ 最小軌間鉄道
・ 最小量
・ 最小間隔(間隙)
・ 最小阻止濃度
・ 最小限
・ 最小限度


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

最小評価 : ウィキペディア日本語版
短絡評価[たんらくひょうか]
短絡評価(たんらくひょうか、)または最小評価(さいしょうひょうか、)とは、一部のプログラミング言語での論理演算子の意味論を示す用語であり、演算子の第一引数を評価した段階で式全体の値が定まらない場合のみ第二引数を評価する方式を意味する。例えば、ANDの第一引数を評価した結果が false であれば、式全体は必ず false になるし、ORの第一引数が true であれば、式全体は必ず true になるので、第二引数を評価するまでもない。LISPなどのプログラミング言語では、論理演算子は短絡評価である。Adaでは、短絡評価方式の演算子と両方を評価する演算子が用意されている。
短絡演算子 ''x'' Sand ''y'' は、if ''x'' then ''y'' else false というif文と等価であり、''x'' Sor ''y'' は、if ''x'' then true else ''y'' と等価である。
典型的な短絡演算子は単なる演算子としての役割だけでなく、制御構造としての役割も持っている。ただし、ALGOL 68 は "proceduring" という機能を使ってユーザー定義の短絡評価の演算子やプロシージャを実現できる。Pascalでは短絡評価をおこなうか否かは処理系依存である〔『PASCAL 原書第4版』(培風館)p. 34〕。
型付けが弱い言語では、TrueFalse の値が一意に定まらない場合があり、短絡演算子は最後に評価した部分式の値を返す。従って、''x'' Sand ''y'' は実際には if ''x'' then ''x'' else ''y'' ''x'' を2回評価するわけではない)となる。下の表ではこれを「最後に評価した値」としている。

== 例 ==
例として次のC言語のコードを見てみよう。

int a = 0;
if (a && myfunc(b))

この例では、短絡評価によって myfunc(b) は決して呼び出されない。なぜなら a は ''false'' と評価されるからである。この性質を利用して2種類のプログラミング技法が得られる。1つは、後半の部分式に時間のかかる処理を置き、最初の部分式でその処理が必要か否かのチェックをするようにすれば、無駄な関数呼び出しなどを減らすことができる。2つめとして、後半の部分式が実行時エラーを起こすかどうかのチェックを前半で行うというコーディングが考えられる。例えば、次のC言語コードは、短絡評価を利用してヌルポインタの参照を防いでいる。

int is_three_chars_long(const char
*p)

このような利点はあるが、短絡評価であることを忘れていると問題が発生することがある。例えば、次のコードを見てみよう。

if (expressionA && myfunc(b))

ここで myfunc(b) が常に実行されることを期待していると、expressionA が false だった場合に実行されないことになり、問題が発生する。Java などの言語では短絡評価式の演算子と普通の演算子を用意して、このような問題に対処している。
if文の条件式で使われる論理積や論理和の演算子は、if文の入れ子をコンパクトに表したものと見ることもできる。例えば、次の擬似コードでは短絡評価が行われるとする。

if (CONDITION_A && CONDITION_B) else

これは、論理積を展開することで次のようにも表せる。

if (CONDITION_A) else

ブール論理の性質から、A_FALSEB_FALSE というコード部分が、最初の例では FALSE という部分に集約されていることに注意されたい。後者の例の方が条件によって異なる処理を記述できるため、必要に応じて使い分けることになる。両者が結局同じことをするコードであれば、共通式削除定数伝播といったコンパイラ最適化によって、どちらも同じコードを生成する可能性がある。
短絡評価を使ってコードの一部の条件付実行を実現することもできる。以下は Perl の例である。

some_condition or die; # some_condition が false なら実行を停止
some_condition and die; # some_condition が true なら実行を停止


抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「短絡評価」の詳細全文を読む

英語版ウィキペディアに対照対訳語「 Short-circuit evaluation 」があります。



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.