AndAlso 演算子 (Visual Basic)

2 つの式の短絡論理積を求めます。

構文

result = expression1 AndAlso expression2  

指定項目

用語 定義
result 必須です。 任意のブール型 ( Boolean ) の式を指定します。 結果は、2 つの式の比較の Boolean 結果です。
expression1 必須です。 任意のブール型 ( Boolean ) の式を指定します。
expression2 必須です。 任意のブール型 ( Boolean ) の式を指定します。

Remarks

コンパイルされたコードが、ある式の評価を別の式の結果に応じてバイパスできる場合、論理演算は "短絡" であると言われます。 最初に評価された式の結果によって演算の最終結果が決まる場合、最終結果を変更できないため、2 番目の式を評価する必要はありません。 バイパスされた式が複雑な場合や、プロシージャ呼び出しが関係している場合に、短絡によってパフォーマンスを向上させることができます。

両方の式が True に評価される場合、resultTrue です。 次の表は、result の判定方法を示しています。

expression1 が次の場合 かつ、expression2 が次の場合 result の値は次のようになります
True True True
True False False
False (評価されていない) False

注意

ブール値の比較では、And 演算子は常に両方の式を評価します。これには、プロシージャ呼び出しを含めることができます。 AndAlso 演算子は "ショートサーキット" を実行します。つまり、expression1False の場合、expression2 は評価されません。

データ型

AndAlso 演算子は Boolean データ型に対してのみ定義されます。 Visual Basic は、式を評価する前に、必要に応じて各オペランドを Boolean に変換します。 結果を数値型に代入すると、Visual Basic によって Boolean からその型への変換が行われ、False0 になり、True-1 になります。 詳細については、ブール型変換に関する記事をご覧ください。

オーバーロード

And 演算子IsFalse 演算子は "オーバーロード" できます。つまり、オペランドがあるクラスまたは構造体の型を持っているときに、そのクラスまたは構造体はその動作を再定義できます。 AndIsFalse の演算子をオーバーロードすると、AndAlso 演算子の動作に影響します。 コードで、AndIsFalse をオーバーロードするクラスまたは構造体で AndAlso を使用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 Operator Procedures」を参照してください。

例 1

次の例では、AndAlso 演算子を使用して、2 つの式の論理積を求めます。 結果は、結合した式全体が真かどうかを表す Boolean 値です。 最初の式が 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

前の例では、それぞれ TrueFalseFalse の結果が生成されます。 secondCheck の計算では、最初の式が既に False であるため、2 番目の式は評価されません。 ただし、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

関連項目