VB.NET And/AndAlso、Or/OrElse 演算子 ここが違い
2011/08/26 11:38Update
VB.NET And/AndAlso、Or/OrElse 演算子 の違いところをサンプルから解説します。
まず、
サンプルから見ます。
問題ないように見えますが、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に変更した場合、どうでしょう。
結論からいいますと、Exceptionが発生しません。
原因は、
AndAlsoの場合、
1 番目の式 (obj Is Nothing)の評価が False の場合、
2 番目の式 (obj.someValue <> String.Empty) の評価を行わないため。
即ち、And演算子とAndAlso 演算子両者の大きな違いは、AndAlso はショートサーキットの動作を示すという点にあります。
■使い方
1)1 番目の式はFalseの場合でも、2 番目の式 を評価したい場合、And演算子を使用します。
2)1 番目の式はFalseの場合、2 番目の式を評価しない場合、AndAlso演算子を使用します。
3)1 番目の式はFalseの場合、2 番目の式を評価してもしなくてもよい場合、AndとAndAlso両方をご利用できます。
例:
■Or/OrElse 演算子
同様に、OrElse 演算子は、ショートサーキット評価で 2 つの Boolean 式の論理和を求めます。OrElse 式の 1 番目の式の評価が True の場合は、2 番目の式の評価がどうなっても最終的な結果は変わらないので、2 番目の式は評価されないまま、OrElse は True を返します。
※参考資料
Visual Basic の論理演算子とビット処理演算子 - MSDN
サンプルから見ます。
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
Sponsored Link
Comments
- Relative Articles
- VB.NET メール送信例 - (2011/08/31 13:34)
- VB.NETの異常処理 - Try ~ Catch ~ 構文 例 - (2011/08/10 15:07)
- VB.NETのHTTPダウンロード例 - (2011/08/10 15:23)
- VB.NETでのインスタンスについて - (2011/08/10 16:16)
- VB.NETの名前空間定義 - (2011/08/10 16:57)
- VB.NET クラスの定義 - (2011/08/10 17:47)
- VB.NET インタフェースの定義とその使用例 - (2011/08/11 11:35)
- VB.NET クラスのコンストラクタ - (2011/08/11 11:55)
- VB.NET getter/setterメソッドの定義方法 - (2011/08/11 16:46)
- VB.NETの列挙体定義 - (2011/08/12 11:02)