VB.NET And/AndAlso、Or/OrElse 演算子 ここが違い

2011/08/26 11:38Update
TAGS: VB.NET | And演算子 | AndAlso演算子 | Or演算子 | OrElse演算子

VB.NET And/AndAlso、Or/OrElse 演算子 の違いところをサンプルから解説します。

まず、

サンプルから見ます。
Dim obj As ...

If (obj Is Nothing) And (obj.someValue <> String.Empty) Then
    '処理
End If


問題ないように見えますが、objはNothingの時にExceptionが発生します。

その原因は、

■And演算子
1 番目の式 (obj Is Nothing)の評価が False の場合でも
2 番目の式 (obj.someValue <> String.Empty) の評価を行います。

そのため、objはNothingの場合、当然obj.someValueを評価しようとすると、Exceptionが発生します。


■AndAlso 演算子
AndAlso 演算子は、2 つの Boolean 式の論理積を求めるという点では And 演算子によく似ています。

では、AndをAndAlsoに変更した場合、どうでしょう。
If (obj Is Nothing) AndAlso (obj.someValue <> String.Empty) Then
    '処理
End If


結論からいいますと、Exceptionが発生しません。

原因は、
AndAlsoの場合、
1 番目の式 (obj Is Nothing)の評価が False の場合、
2 番目の式 (obj.someValue <> String.Empty) の評価を行わないため。

即ち、And演算子とAndAlso 演算子両者の大きな違いは、AndAlso はショートサーキットの動作を示すという点にあります。


■使い方
1)1 番目の式はFalseの場合でも、2 番目の式 を評価したい場合、And演算子を使用します。
If (obj Is Nothing) AndAlso check(obj) Then    'プログラムのロジックがcheck() Function  に依存している場合
    '処理
End If


2)1 番目の式はFalseの場合、2 番目の式を評価しない場合、AndAlso演算子を使用します。
If (obj Is Nothing) AndAlso (obj.someValue <> String.Empty) Then
    '処理
End If


3)1 番目の式はFalseの場合、2 番目の式を評価してもしなくてもよい場合、AndとAndAlso両方をご利用できます。
例:
If a == 0 And b == 0 Then        'If a == 0 AndAlso b == 0 Then

End If



■Or/OrElse 演算子
同様に、OrElse 演算子は、ショートサーキット評価で 2 つの Boolean 式の論理和を求めます。OrElse 式の 1 番目の式の評価が True の場合は、2 番目の式の評価がどうなっても最終的な結果は変わらないので、2 番目の式は評価されないまま、OrElse は True を返します。
※参考資料

参考資料


Visual Basic の論理演算子とビット処理演算子 - MSDN

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation