2

典型的なコーディングのマントラが「メソッド呼び出しで副作用を誘発しない」であることを考えると。短絡演算子を使用しない唯一の理由 (私が間違っている場合は教えてください) は、後続のコードでメソッド呼び出しの副作用に依存する場合です。C# や VB.NET などの言語の既定の演算子が短絡バージョンではないのはなぜですか?

いいえ:

 if (Method1() & Method2()) {
 }

 if Method1 And Method2 then
 End if

 if (Method1() | Method2()) {
 }

 if Method1 Or Method2 then
 End if

実際には(デフォルトで)

 if (Method1() && Method2()) {
 }

 if Method1 AndAlso Method2 then
 End if

 if (Method1() || Method2()) {
 }

 if Method1 OrElse Method2 then
 End if
4

1 に答える 1

0

2 つの異なる理由と 2 つの異なる答えがあると思います。

C# (およびほとんどの関連する古い言語) の場合、単一のアンパサンドまたは単一のパイプは、実際には変数に対してビット単位の操作を行います (論理ではなくビット単位)。そのため、すべての C/C++ コードで、誰かが論理を必要とし、コードに二重のアンパサンドが表示される場合があります。

VB.NETの場合、答えは歴史にあると思います。従来の Basic 言語は、非短絡演算を行うために常に「and」と「or」を使用してきました。これは非常にまずい決定でしたが、VB.NET までずっと引き継がれてきました。

すべての Basic 言語は、「and/or」キーワードを使用してビット演算も行うことに注意してください。以前の Basics では、短絡を強制するための AndAlso または OrElse キーワードの等価物がなかったため、If ステートメントをネストして短絡の論理等価物を取得する必要がありました。

于 2012-02-05T06:17:55.293 に答える