プログラミング/短絡評価
< プログラミング
短絡評価とは、プログラムの実行速度とパフォーマンスを向上させるための効果的な論理演算子の使用方法です。
短絡評価演算子は、論理積(AND)と論理和(OR)の両方に存在します。論理積演算子で左辺がfalse(偽)と評価された場合、式全体の値はfalseであるため、右辺は評価されず、実行されません。同様に、論理和演算子の左辺がtrue(真)に評価された場合、式全体の値はtrueであるため、右辺は評価されず、実行されません。
排他的論理和(XOR)のような一部の論理演算では、両方のオペランドが必要なため、短絡評価演算を行うことはできません。
遅延評価を持つLisp、Perl、Haskellのような言語では、通常の論理演算子も短絡評価演算子として機能します。一方、Ada、Java、Delphiなどの他の言語では、短絡評価演算子と通常の論理演算子の両方を持っています。
短絡評価演算子は、制御構造であり、単純な算術演算子ではありません。コンピュータプログラミングの世界では、正確で堅牢なコードを作成するために、短絡評価の適切な使用が必要不可欠です。
以下のようなコードがあったとします。
if (a != NULL && *a == 'x') { // ... }
- 左辺の
a != NULL
がfalse
の場合は右辺の*a == 'x'
の評価が不要であるため、短絡評価を用いることで効率的に処理を行うことができます。
同様に、以下のようなコードでも短絡評価が使われます。
この場合、左辺の p != NULL
が false
の場合は、右辺の q != NULL
および *p == *q
の評価が不要であるため、処理を早期に終了することができます。
短絡評価は、プログラムの実行速度を向上させることができるだけでなく、エラーを防ぐことにも役立ちます。例えば、以下のようなコードがあったとします。
if (p != NULL && q != NULL && *p == *q) { // ... }
- 左辺の
p != NULL
がtrue
の場合は右辺のstrlen(p) > 0
の評価が行われず、p
がNULL
の場合はstrlen()
の呼び出しを行わないため、セグメンテーションフォルトなどのエラーを防ぐことができます。