AndAlso
オペレーターではなくオペレーターを使いたくないという状況はありAnd
ますか?OrElse
…または、演算子ではなく演算子Or
を使用したくない場合は、
3 に答える
MSDNから:
短絡的なトレードオフ
ショートサーキットは、論理演算の結果を変更できない式を評価しないことで、パフォーマンスを向上させることができます。ただし、その式が追加のアクションを実行する場合、ショートサーキットはそれらのアクションをスキップします。たとえば、式に Function プロシージャの呼び出しが含まれている場合、式が短絡されているとそのプロシージャは呼び出されず、Function に含まれる追加のコードは実行されません。プログラム ロジックがその追加コードのいずれかに依存している場合は、おそらく短絡演算子を避ける必要があります。
And 演算子ではなく AndAlso 演算子を使用したくない状況はありますか?
確かに: 式の両側が評価されることを確認したい場合。これは、たとえば、両側が副作用のある他の操作の結果としてブール値を返すメソッド呼び出しである場合に当てはまります。
しかし、一般的には、C/C++/C# で/を使用するときはいつでもAndAlso
/を使用してください。もちろん、これはほとんどの場合です。OrElse
&&
||
これらは VB.net では完全に異なる機能であり、どちらにもユース ケースがあります (ただし、最も一般的な用途では両方とも機能します)。
AndAlso
およびOrElse
は条件付き演算子であり、true または false のブール値を返し、変更できない結果に到達するまで必要なものだけを評価します (AndAlso の場合は false、OrElse の場合は true)。これらは、C# や Java などの言語&&
と同等です。||
And
およびビット単位Or
の演算子であり、渡されたビットを組み合わせて結果にします。これらのビットは、さらに評価することで常に変更される可能性があるため、すべてを評価する必要があります。これらは、C# や Java などの言語と同等です。&
|
ほとんどの場合、and/or 操作を見ているときは、条件付きの結果が必要です。ビット単位の操作は、true または false の値を生成し、(通常) 適切な条件演算子からの true または false の結果と一致します。すべてを評価するため、平均して少し時間がかかります。
ビット単位の演算子は、値の特定のビットに関心がある場合に使用することを意図しており、多くの場合、設定やアクセス許可をできるだけコンパクトな方法で保存し、それらをできるだけ速く読み取って適用するために使用されます。たとえば、Unix ベースのシステムのファイルに対する読み取り/書き込み/実行権限は、次のようにビット フラグを使用します。
0b001 - 実行許可
0b010 - 書き込み許可
0b100 - 読み取り許可
したがって、10 進数では、7 の値は 3 つすべてを行うことができ、4 の値は読み取りのみが可能で、6 は読み取りと書き込みが可能ですAnd 0b010
。その位置のビットに基づく偽の結果。ユーザーがファイルを実行できるように値を更新するには、ユーザーOr 0b001
の現在のアクセス許可を使用して結果を保存します。
違いはここにあります:
0b001 (真実) And 0b010 (真実) = 0b000 (偽)
0b001 (真実) AndAlso 0b010 (真実) = 真