以前学生から聞いた話なのですが、C言語やC++やC#などを一通り学んでいても、意外に&&や||といった演算子の短絡評価を知らないそうです。

その当時、ちょっと入門サイトをいくつか調べてみましたが、確かに短絡評価に触れているところは見当たりませんでした。皆無ではないでしょうが、初心者が短絡評価を知る機会はそう多くないようです。しかし、短絡評価は初心者だから知らなくてもよいというようなものではなく、これを知らなければまともな条件式は書けないはずです。

C言語の規格であるJIS X3010:2003の「6.5.13 論理AND演算子」から、該当部分を調べてみました。

ビット単位の2項 & 演算子と異なり,&& 演算子は左から右への評価を保証する。第一オペランドの評価の直後を副作用完了点とする。第1オペランドの値が0と比較して等しい場合,第2オペランドは評価しない。

つまり,&& の左辺が偽であれば,右辺は評価されずに条件式全体の評価結果が決まることになります。右辺に副作用を伴う式がある場合、左辺の結果次第では実行されなくなるため、思わぬ不具合につながります(右辺に副作用を伴う式を書いてはいけないのではなく、動作をきちんと理解すべきだということです)。

ついでに、「6.5.14 論理OR演算子」の該当部分も引用してみます。

ビット単位の | 演算子と異なり,|| 演算子は左から右への評価を保証する。第一オペランドの評価の直後を副作用完了点とする。第1オペランドの値が0と比較して等しくない場合,第2オペランドは評価しない。

こちらは、|| の左辺が真であれば、右辺が評価されないことになります。

ここではC言語の例を取り上げましたが、ほとんどのプログラミング言語で同じようになっているはずです。C言語の影響を強く受けたC++、C#、Java、JavaScript、PHPなんかはもちろん、RubyやPythonのようにC言語とは文法がかなり異なる言語でも同様です。