論理演算子
VB.NETではVB6以前からの論理演算子Or
, And
, Xor
, Not
が使えます。
AndAlso演算子・OrElse演算子
VB.NETでは新たにAndAlso
とOrElse
という演算子が追加されました。 これはショートサーキットによる評価を行うための演算子で、And/Or演算子とAndAlso/OrElse演算子の違いは、第二項が常に評価されるかどうかが異なる点にあります。 第一項がFalseの場合、AndAlsoは第二項を評価せずにFalseを返します。 同様に、第一項がTrueの場合、OrElseは第二項を評価せずに Trueを返します。
And演算子とAndAlso演算子の違いをより明確にするため、次のようなコードを考えます。
この例ではFunc1は失敗、Func2は成功します。 And演算子を使った場合では、Func1が失敗となってもFunc2も呼び出されます。 一方AndAlso演算子を使った場合は、Func1が失敗した時点で式Func1() AndAlso Func2()
がFalse
となる事が確定するため、Func2は呼び出す必要がなくなります(Func2を評価しない)。
そのため、上記のコードの実行結果はこのようになります。
AndAlso演算子・OrElse演算子の真理値表をまとめると次のようになります。
第一項 | 第二項 | 結果 |
---|---|---|
False | False | False |
False | True | True |
True | False | True |
True | True | True |
第一項 | 第二項 | 結果 |
---|---|---|
False | False | False |
False | True | True |
True | (評価しない) | True |
第一項 | 第二項 | 結果 |
---|---|---|
False | False | False |
False | True | False |
True | False | False |
True | True | True |
第一項 | 第二項 | 結果 |
---|---|---|
False | (評価しない) | False |
True | False | False |
True | True | True |
If演算子
VB.NET 2008(Visual Studio 2008)からは、If演算子がサポートされるようになりました。 これはCやC#の三項演算子~?~:~
と同様のものです。 If演算子は、If(条件式, 真の場合の値, 偽の場合の値)
という形式で使用します。 If演算子は、AndAlso・OrElse演算子と同様にショートサーキットによる評価を行います。
If演算子と似たものとしてIIf関数が用意されていましたが、IIf関数では結果はObject型で返されるのに対し、If演算子では結果が第二項・第三項の型で返される点が異なります。
1行形式のIf~Then~ElseステートメントとIf演算子を使った場合の違いを例示すると次のようになります。 Ifステートメントでは条件式と真偽それぞれの場合の処理(ステートメント)を記述しますが、If演算子では条件式と真偽それぞれの場合の値を記述します。
二項形式のIf演算子
If演算子では二項形式でも使用できます。 二項形式のIf演算子は、If(値, 第一項がNothingの場合の値)
という形式で使用します。 第一項がNothingの場合は第二項の値が返され、Nothing以外の場合は第一項の値がそのまま返されます。 If演算子を二項形式で使用する場合、第一項は参照型(もしくはnull許容型)でなければなりません。 二項形式のIf演算子は、C#におけるnull合体演算子??
と同様のものです。
Eqv演算子・Imp演算子
VB6以前に存在したEqv, Imp演算子はVB.NETでは廃止されました。 これらの演算子と同様の結果を得るには次のようにします