VB.NET 条件 AndAlso OrElse

今回は、「AndAlso」と「OrElse」について紹介をしていきますが、正直別に知らなくてもプログラムは組めます。
ただ、たまーに使えると便利なときがあるので是非参考にしてみてください。

そもそも「AndAlso」と「OrElse」は、If文などの条件分岐で、「AND」と「OR」を基本的に使用していますが、その仲間です。
If文の条件が複数ある時に使用するので、「AndAlso」と「And」、「OrElse」と「Or」はとても似ていますが、今回はその違いにつてい紹介していきたいと思います。

AndとAndAlsoの違い

Andは、複数の条件を全て判定してから処理を進めていきます。
AndAlsoは、複数の条件があっても、1つ目の条件が当てはまらない時に次の条件を見ずに当てはまらなければFalseと判断して、処理を進めていきます。

言葉だとわかりにくいので、例を見てみましょう。
まずは、普段使用している「And」を見ていきます。

Private Sub FrmAndAlso_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try
        Dim list As New List(Of String)
        If list.Count > 0 And list.Item(0) = "test" Then
            MsgBox("リストの値は「test」です。")
        Else
            MsgBox("リストの値にデータがないか、「test」以外の値が入っています。")
        End If

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

結果

解説
3行目:リスト型の変数を宣言
4行目:リストには何も追加していないので、list.Countは0となります。
また次の、list.Item(0)はlistにはデータがなくItem(0)を指定できないためエラーが発生しています。 

 

次に、「And」を「AndAlso」に変換してみましょう。

Private Sub FrmAndAlso_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try
        Dim list As New List(Of String)
        If list.Count > 0 AndAlso list.Item(0) = "test" Then
            MsgBox("リストの値は「test」です。")
        Else
            MsgBox("リストの値にデータがないか、「test」以外の値が入っています。")
        End If

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

結果

解説
4行目:AndAlsoを使用しています。list.Countは、先ほどと同じように、0なので条件( > 0)には当てはまりません。
AndAlsoの場合はこの時点でFalseと判断され、二つ目の条件(list.Item(0)="test")を見に行かず、FalseなのでElseの判定に行きます。
このようにAndAlsoの場合は、Falseと判定された時点で次の処理へ移行するのです。
And文は、どちらもTrueの時True、1つでもFalseがあるとFalseになるので、その特性を利用し処理を早くするのが、AndAlsoになります。

 

「And」を「AndAlso」の違いが分かったと思います。

OrとOrElseの違い

それでは次に、「Or」と「OrElse」の違いも見てみましょう。
「And」と「AndAlso」と同じような感じなので、なんとなくわかると思います。

 

「AndAlso」の場合は、判定がFalseになった時点で、次の処理へ進んでいきました。
「OrElse」の場合は、判定がTrueになった時点で、次の処理へ進んでいきます。

例を見てみましょう。

Private Sub FrmAndAlso_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try
        Dim list As New List(Of String)
        If list.Count = 0 Or list.Item(0) = "test" Then
            MsgBox("リストの値は「test」です。")
        Else
            MsgBox("リストの値にデータがないか、「test」以外の値が入っています。")
        End If

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

結果

4行目:list.Count = 0は満たしているので、判定はTrue になります。次の条件に行きますが、list.Item(0)でlistにデータがないので1件目を指定しようとするとエラーが発生します。

続いて、「OrElse」を見ていきます。

Private Sub FrmAndAlso_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try
        Dim list As New List(Of String)

        If list.Count = 0 OrElse list.Item(0) = "test" Then
            MsgBox("リストの値は「test」です。")
        Else
            MsgBox("リストの値にデータがないか、「test」以外の値が入っています。")
        End If

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

結果

解説
4行目:先ほどと同じように、list.Count = 0は満たしているので、Trueとなります。
OrElseの場合この時点でTrue確定なので、次の条件は見ずに、Trueの処理へと進みます。
このようにOrElseの場合は、Trueと判定された時点で次の処理へ移行するのです。
Or文は、どちらか1つでもTrueの時にTrueになるので、その特性を利用し処理を早くするのが、OrElseになります。

 

まとめ

「AndAlso」の場合は、判定がFalseになった時点で、次の処理へ進んでいきます。
「OrElse」の場合は、判定がTrueになった時点で、次の処理へ進んでいきます。

AndAlsoとOrElseの使い方を理解することができましたか?
あまり使うことはないかもしれないですが、是非使ってみてください。

 

VB.NETの記事一覧

おすすめの記事