OrElse 演算子
更新 : 2007 年 11 月
2 つの式の包括的論理和を簡略的に求めます。
result = expression1 OrElse expression2
指定項目
result
必ず指定します。任意のブール型 (Boolean) の式を指定します。expression1
必ず指定します。任意のブール型 (Boolean) の式を指定します。expression2
必ず指定します。任意のブール型 (Boolean) の式を指定します。
解説
コンパイルされたコードで、1 つの式の結果によってはもう 1 つの式の評価を省略できる場合、その論理演算をショートサーキットと呼びます。最初に評価される式の結果によって演算の最終結果が決まる場合は、もう 1 つの式によって最終結果が変わることはないため、その式を評価する必要はありません。省略される側の式が複雑な場合や、プロシージャの呼び出しを含む場合は、ショートサーキットによってパフォーマンスを向上できます。
一方の式、または両方の式が True に評価される場合、result は True になります。次の表は、2 つの式と result の値の関係を示しています。
expression1 の値 |
expression2 の値 |
result の値 |
---|---|---|
True |
(評価しない) |
True |
False |
True |
True |
False |
False |
False |
データ型
OrElse 演算子は、ブール型 (Boolean) (Visual Basic) に対してのみ定義されます。Visual Basic は各オペランドを必要に応じてブール型 (Boolean) に変換し、演算をすべて Boolean で実行します。結果を数値型に代入する場合は、結果が Boolean から数値型に変換されます。これによって、予期しない結果が返される可能性があります。たとえば、5 OrElse 12 の結果を整数 (Integer) に変換すると、–1 になります。
オーバーロード
Or 演算子 (Visual Basic) と IsTrue 演算子 はオーバーロードできます。つまり、オペランドがクラスや構造体を型として持つ場合に、演算子の動作をそのクラスや構造体で再定義できるという意味です。Or 演算子と IsTrue 演算子のオーバーロードは、OrElse 演算子の動作に影響を与えます。コードが、Or および IsTrue をオーバーロードするクラスや構造体で OrElse を使用している場合は、再定義された後の動作を必ず理解するようにしてください。詳細については、「演算子プロシージャ」を参照してください。
使用例
OrElse 演算子を使って 2 つの式の論理和を求める例を次に示します。結果は、2 つの式のどちらかが真かどうかを表すブール値です。最初の式が真 (True) の場合、2 番目の式は評価されません。
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b OrElse b > c
secondCheck = b > a OrElse b > c
thirdCheck = b > a OrElse c > b
先の例では、True、True、False という結果がそれぞれ生成されます。firstCheck の計算では、最初の式が True であるため、2 番目の式は評価されません。一方、secondCheck の計算では、2 番目の式も評価されます。
2 つのプロシージャ呼び出しを含む If...Then ステートメントの例を次に示します。最初の呼び出しが True を返した場合、2 番目のプロシージャは呼び出されません。このため、2 番目のプロシージャがコードのこの部分で必ず処理されるべき重要なタスクを実行する場合に、予期しない結果が返される可能性があります。
If testFunction(5) = True OrElse otherFunction(4) = True Then
' If testFunction(5) is True, otherFunction(4) is not called.
' Insert code to be executed.
End If