15

VB には演算子AndAlsoOrElseがあり、短絡論理積を実行します。

ショートサーキットはあらゆる場合に役立つため、これがAndおよびOr式のデフォルトの動作ではないのはなぜですか。

奇妙なことに、これは&&||を使用するほとんどの言語とは対照的です。短絡を行います。

4

3 に答える 3

18

VBチームは、古いコード(およびプログラマー)との下位互換性を維持する必要があったためです。

短絡がデフォルトの動作である場合、ビット単位の演算はコンパイラによって誤って解釈されます。

パノプティコンセントラルによるAndAlsoとOrElseのバラード

最初に考えたのは、論理演算はビット演算よりもはるかに一般的であるため、AndおよびOrを論理演算子にして、BitAnd、BitOr、BitXor、およびBitNotという名前の新しいビット演算子を追加する必要があります(最後の2つは完全を期すためです)。ただし、ベータ版の1つで、これはかなり悪い考えであることが明らかになりました。新しい演算子が存在することを忘れてAndを使用するVBユーザーは、BitAndを意味する場合、およびBitOrを意味する場合、コンパイルされるが「悪い」結果を生成するコードを取得します。

于 2009-01-28T07:09:44.293 に答える
1

短絡がすべての場合に役立つとは思いません。必要なときだけ使っています。たとえば、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

したがって、私の意見では、両方の構文オプションが非常に必要です。

于 2009-01-28T07:14:07.280 に答える
0

明示的な短絡により、左側のオペランドが最初に評価されることが保証されます。

VB 以外の一部の言語では、論理演算子は暗黙的なショート サーキットを実行する場合がありますが、最初に右側の演算子を評価する場合があります (たとえば、論理演算子の左右の式の複雑さに応じて)。

于 2009-01-28T13:40:10.260 に答える