VB には演算子AndAlsoとOrElseがあり、短絡論理積を実行します。
ショートサーキットはあらゆる場合に役立つため、これがAndおよびOr式のデフォルトの動作ではないのはなぜですか。
奇妙なことに、これは&&と||を使用するほとんどの言語とは対照的です。短絡を行います。
VB には演算子AndAlsoとOrElseがあり、短絡論理積を実行します。
ショートサーキットはあらゆる場合に役立つため、これがAndおよびOr式のデフォルトの動作ではないのはなぜですか。
奇妙なことに、これは&&と||を使用するほとんどの言語とは対照的です。短絡を行います。
VBチームは、古いコード(およびプログラマー)との下位互換性を維持する必要があったためです。
短絡がデフォルトの動作である場合、ビット単位の演算はコンパイラによって誤って解釈されます。
パノプティコンセントラルによるAndAlsoとOrElseのバラード
最初に考えたのは、論理演算はビット演算よりもはるかに一般的であるため、AndおよびOrを論理演算子にして、BitAnd、BitOr、BitXor、およびBitNotという名前の新しいビット演算子を追加する必要があります(最後の2つは完全を期すためです)。ただし、ベータ版の1つで、これはかなり悪い考えであることが明らかになりました。新しい演算子が存在することを忘れてAndを使用するVBユーザーは、BitAndを意味する場合、およびBitOrを意味する場合、コンパイルされるが「悪い」結果を生成するコードを取得します。
短絡がすべての場合に役立つとは思いません。必要なときだけ使っています。たとえば、2つの異なる接続されていない変数をチェックする場合、それは必要ありません。
If x > y And y > z Then
End If
Paul Vickの記事が示すように(上記のKen Browningが提供するリンクを参照)、短絡が役立つ完璧なシナリオは、オブジェクトの存在を最初にチェックしてから、そのプロパティの1つを評価する場合です。
If x IsNot Nothing AndAlso x.Someproperty > 0 Then
End If
したがって、私の意見では、両方の構文オプションが非常に必要です。
明示的な短絡により、左側のオペランドが最初に評価されることが保証されます。
VB 以外の一部の言語では、論理演算子は暗黙的なショート サーキットを実行する場合がありますが、最初に右側の演算子を評価する場合があります (たとえば、論理演算子の左右の式の複雑さに応じて)。