AndAlso 演算子 (Visual Basic)
2 つの式の短絡論理積を求めます。
構文
result = expression1 AndAlso expression2
指定項目
用語 | 定義 |
---|---|
result |
必須です。 任意のブール型 ( Boolean ) の式を指定します。 結果は、2 つの式の比較の Boolean 結果です。 |
expression1 |
必須です。 任意のブール型 ( Boolean ) の式を指定します。 |
expression2 |
必須です。 任意のブール型 ( Boolean ) の式を指定します。 |
Remarks
コンパイルされたコードが、ある式の評価を別の式の結果に応じてバイパスできる場合、論理演算は "短絡" であると言われます。 最初に評価された式の結果によって演算の最終結果が決まる場合、最終結果を変更できないため、2 番目の式を評価する必要はありません。 バイパスされた式が複雑な場合や、プロシージャ呼び出しが関係している場合に、短絡によってパフォーマンスを向上させることができます。
両方の式が True
に評価される場合、result
は True
です。 次の表は、result
の判定方法を示しています。
expression1 が次の場合 |
かつ、expression2 が次の場合 |
result の値は次のようになります |
---|---|---|
True |
True |
True |
True |
False |
False |
False |
(評価されていない) | False |
注意
ブール値の比較では、And
演算子は常に両方の式を評価します。これには、プロシージャ呼び出しを含めることができます。 AndAlso 演算子は "ショートサーキット" を実行します。つまり、expression1
が False
の場合、expression2
は評価されません。
データ型
AndAlso
演算子は Boolean データ型に対してのみ定義されます。 Visual Basic は、式を評価する前に、必要に応じて各オペランドを Boolean
に変換します。 結果を数値型に代入すると、Visual Basic によって Boolean
からその型への変換が行われ、False
が 0
になり、True
が -1
になります。
詳細については、ブール型変換に関する記事をご覧ください。
オーバーロード
And 演算子と IsFalse 演算子は "オーバーロード" できます。つまり、オペランドがあるクラスまたは構造体の型を持っているときに、そのクラスまたは構造体はその動作を再定義できます。 And
と IsFalse
の演算子をオーバーロードすると、AndAlso
演算子の動作に影響します。 コードで、And
と IsFalse
をオーバーロードするクラスまたは構造体で 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
前の例では、それぞれ True
、False
、False
の結果が生成されます。 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
関連項目
.NET