短絡評価
例として次のC言語のコードを見てみよう。
この例では、短絡評価によって myfunc(b) は決して呼び出されない。なぜなら a は false と評価されるからである。この性質を利用して2種類のプログラミング技法が得られる。1つは、後半の部分式に時間のかかる処理を置き、最初の部分式でその処理が必要か否かのチェックをするようにすれば、無駄な関数呼び出しなどを減らすことができる。2つめとして、後半の部分式が実行時エラーを起こすかどうかのチェックを前半で行うというコーディングが考えられる。例えば、次のC言語コードは、短絡評価を利用してヌルポインタの参照を防いでいる。
短絡評価を利用することで、コードブロックの入れ子がいたずらに深くなることを防ぐこともできる。
このような利点はあるが、短絡評価であることを忘れていると問題が発生することがある。例えば、次のコードを見てみよう。
ここで、myfunc(b) は副作用のある式だとする。myfunc(b) が常に実行されることを期待していると、expressionA が false だった場合に実行されないことになり、問題が発生する。
C#では条件論理演算子をオーバーロードすることはできないが、ユーザー定義型Tの特定の演算子をオーバーロードすることで、Tを返す短絡評価の論理演算を記述することができるようになる。Microsoft Visual Basic 6.0以前では短絡評価しない演算子のみがサポートされ、短絡評価の演算子をサポートしていなかった。しかし、後継のVB.NETでは短絡評価の演算子をサポートするようになった。
短絡評価の演算子には単なる演算子としての役割だけでなく、制御構造としての役割を負わせることができる。(なお、ALGOL 68 は "proceduring" という機能を使ってユーザー定義の短絡評価の演算子やプロシージャを実現できる)
短絡評価では、x Sand y は、if x then y else false というようなif式のような意味となり、x Sor y は、if x then true else y のような意味となる。ただしこれは演算結果の値がtrueあるいはfalseのブーリアン型の場合である。型付けが弱い言語などでは、論理演算子の引数として任意の型を使うことができ、型毎に定められている、その値が真っぽい(truthy)か、偽っぽい(falsey)か、に従って短絡評価の論理演算を行うものがある。この場合、「その式全体の真偽を決定付けた、最後に評価した引数の値」を返す。下の表の「型」のカラムではその値の型という意味で、「最後に評価した値」としている。