AndAlso 演算子

更新 : 2007 年 11 月

2 つの式の論理積を簡略的に求めます。

result = expression1 AndAlso expression2

指定項目

  • result
    必ず指定します。任意のブール型 (Boolean) の式を指定します。結果は、2 つの式の比較結果を表すブール値になります。

  • expression1
    必ず指定します。任意のブール型 (Boolean) の式を指定します。

  • expression2
    必ず指定します。任意のブール型 (Boolean) の式を指定します。

解説

コンパイルされたコードで、1 つの式の結果によってはもう 1 つの式の評価を省略できる場合、そこで使用される論理演算子をショートサーキットと呼びます。最初に評価される式の結果によって演算の最終結果が決まる場合は、もう 1 つの式によって最終結果が変わることはないため、その式を評価する必要はありません。省略される側の式が複雑な場合や、プロシージャの呼び出しを含む場合は、ショートサーキットによってパフォーマンスを向上できます。

両方の式の評価が True の場合、result は True になります。次の表は、2 つの式の値と演算結果 result の値の対応を示しています。

expression1 の値

expression2 の値

result の結果

True

True

True

True

False

False

False

(評価しない)

False

AndAlso 演算子の利用法の 1 つは、メンバにアクセスする前に、そのオブジェクト インスタンスが存在するかどうかをテストすることです。次のコードは、これを示したものです。

If newObject AndAlso newObject.initFinished Then

このコードで initFinished プロパティにアクセスしようとしたとき、newObject 変数にオブジェクト インスタンスが割り当てられていないと、NullReferenceException 例外がスローされます。ただし、Nothing の評価は False なので、AndAlso 演算子によって、コンパイラは、newObject が Nothing の場合に initFinished へのアクセスをスキップします。

データ型

AndAlso 演算子は、ブール型 (Boolean) (Visual Basic) のみに対して定義されます。Visual Basic は、各オペランドを必要に応じて Boolean に変換し、完全な Boolean に対して演算を実行します。結果を数値型に割り当てる場合、Visual Basic は結果を Boolean からこのデータ型に変換します。これにより、予期しない動作が起きることがあります。たとえば、5 AndAlso 12 の結果は、Integer に変換すると –1 になります。

オーバーロード

And 演算子 (Visual Basic)IsFalse 演算子 はオーバーロードできます。つまり、オペランドがそのクラスまたは構造体の型であれば、クラスまたは構造体がこの動作を再定義できます。And および IsFalse 演算子をオーバーロードすると、AndAlso 演算子の動作に影響します。And および IsFalse をオーバーロードしているクラスまたは構造体で AndAlso を使用している場合、再定義された動作を確認してください。詳細については、「演算子プロシージャ」を参照してください。

使用例

AndAlso 演算子を使って 2 つの式の論理積を求める例を次に示します。結果は、結合された式全体が真かどうかを表すブール値です。最初の式が False の場合、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 AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b

前の例では、True、False、False の結果を順に生成します。secondCheck の計算では、最初の式が False であるため、2 番目の式は評価されません。しかし、thirdCheck の計算では、2 番目の式が評価されます。

次の例では、配列の要素の中から指定された値を検索する Function プロシージャを示します。配列が空の場合、また、配列の長さが限度を超えている場合、While ステートメントは配列の要素を検索値に対してテストしません。

Public Function findValue(ByVal arr() As Double, _
    ByVal searchValue As Double) As Double
    Dim i As Integer = 0
    While i <= UBound(arr) AndAlso arr(i) <> searchValue
        ' If i is greater than UBound(arr), searchValue is not checked.
        i += 1
    End While
    If i > UBound(arr) Then i = -1
    Return i
End Function

参照

概念

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

参照

論理/ビット演算子

Visual Basic における演算子の優先順位

機能別の演算子一覧

And 演算子 (Visual Basic)

IsFalse 演算子