コンテンツにスキップ

プログラミング/短絡評価

出典: フリー教科書『ウィキブックス(Wikibooks)』

短絡評価とは、プログラムの実行速度とパフォーマンスを向上させるための効果的な論理演算子の使用方法です。

短絡評価演算子は、論理積(AND)と論理和(OR)の両方に存在します。論理積演算子で左辺がfalse(偽)と評価された場合、式全体の値はfalseであるため、右辺は評価されず、実行されません。同様に、論理和演算子の左辺がtrue(真)に評価された場合、式全体の値はtrueであるため、右辺は評価されず、実行されません。

排他的論理和(XOR)のような一部の論理演算では、両方のオペランドが必要なため、短絡評価演算を行うことはできません。

遅延評価を持つLisp、Perl、Haskellのような言語では、通常の論理演算子も短絡評価演算子として機能します。一方、Ada、Java、Delphiなどの他の言語では、短絡評価演算子と通常の論理演算子の両方を持っています。

短絡評価演算子は、制御構造であり、単純な算術演算子ではありません。コンピュータプログラミングの世界では、正確で堅牢なコードを作成するために、短絡評価の適切な使用が必要不可欠です。

以下のようなコードがあったとします。

if (a != NULL && *a == 'x') {
    // ...
}
左辺の a != NULLfalse の場合は右辺の *a == 'x' の評価が不要であるため、短絡評価を用いることで効率的に処理を行うことができます。

同様に、以下のようなコードでも短絡評価が使われます。

この場合、左辺の p != NULLfalse の場合は、右辺の q != NULL および *p == *q の評価が不要であるため、処理を早期に終了することができます。

短絡評価は、プログラムの実行速度を向上させることができるだけでなく、エラーを防ぐことにも役立ちます。例えば、以下のようなコードがあったとします。

if (p != NULL && q != NULL && *p == *q) {
    // ...
}
左辺の p != NULLtrue の場合は右辺の strlen(p) > 0 の評価が行われず、pNULL の場合は strlen() の呼び出しを行わないため、セグメンテーションフォルトなどのエラーを防ぐことができます。