C#の勉強をしていて、
C#の「&&」はVB.NETの「AndAlso」
C#の「||」はVB.NETの「OrElse」という記述を見つけました。
今まで、「AndAlso」「OrElse」の存在を知らず、
「And」「Or」しか使ったことがなかったので、これらの違いについて調べてみました。
「And」を「Or」は両サイドの値を評価しますが、
「AndAlso」「OrElse」は左辺の評価で結果が決まったら右辺の評価をしないという仕組みになっています。
「And」と「AndAlso」の違い
「X And Y」と「X AndAlso Y」はどちらも、
「X かつ Y 」であるかどうかを確かめるという動作になっています。
「X かつ Y 」がTrueかどうか評価するとき、仮にXがFalseなら、Yがどちらであっても、
XがTrueかつYがTrueであるということは成立しません。
なのにも関わらずYがTrueかどうかチェックするのが「And」、
評価をしないのが「AndAlso」です。
「Or」と「OrElse」の違い
「X Or Y」と「X OrElse Y」はどちらも、
「X または Y 」であるかどうかを確かめるという動作になっています。
「X または Y 」がTrueかどうか評価するとき、仮にXがTrueなら、Yがどちらであっても、
XがTrueまたはYがTrueであるということは成立しません。
なぜ「And」と「Or」があるのか?
「And」と「AndAlso」が結果が同じで速度が「AndAlso」の方が早いのなら、
「And」の内部処理を「AndAlso」と同じにして、「And」のみにしたほうがコードも短いし、
良かったと思います。
「And」と「Or」の存在意義を理解することができません。
おそらくVBとの互換性を維持するために残してあるのではないかと言われています。