論理 AND 式および論理 OR 式のオペランドは、左から右に評価されます。1 つ目のオペランドの値で演算の結果を決定できる場合、2 つ目のオペランドは評価されません。これは、"ショートサーキット" 評価と呼ばれます。この資料では、Microsoft Visual Basic 2005 または Microsoft Visual Basic .NET の論理 AND 演算子および論理 OR 演算子のショートサーキット評価について説明します。
Visual Basic 2005 または Visual Basic .NET では、論理 AND 式および論理 OR 式のオペランドは、1 つ目のオペランドの結果に関係なく、2 つ目も評価されます。これらの演算子の動作は、Microsoft Visual C# .NET での動作とは異なり、Microsoft Visual Basic 6.0 での動作と同様です。そのため、論理 AND 演算子および論理 OR 演算子はショートサーキット評価ではありません。ただし、Visual Basic 2005 または Visual Basic .NET には、新しい 2 つの演算子 (AndAlso 演算子および OrElse 演算子) があります。これらの演算子を、それぞれ論理 AND 演算子および論理 OR 演算子の代わりに使用できます。これらの演算子を使用すると、Visual Basic .NET で "ショートサーキット" 評価を行うことができます。
Visual Basic 6.0 のサンプル コード
Visual Basic 6.0 でのショートサーキット評価について確認するための手順を以下に示します。
-
Visual Basic 6.0 を起動し、新しい標準 EXE プロジェクトを作成します。
デフォルトでは、Form1 という名前のフォームが作成されます。
-
フォームに 2 つの Command ボタンを追加します。
-
[Form1] を右クリックし、[コードの表示] をクリックします。
-
次のコードを Form1 フォームに追加します。
Option Explicit
Public Function FalseFunc() As Boolean
MsgBox ("Function Returning False")
FalseFunc = False
End Function
Public Function TrueFunc() As Boolean
MsgBox ("Function Returning True")
TrueFunc = True
End Function
Private Sub Command1_Click()
If FalseFunc And TrueFunc Then
' Do Nothing
End If
End Sub
Private Sub Command2_Click()
If TrueFunc Or FalseFunc Then
MsgBox "Both the Functions are called."
End If
End Sub
-
[実行] メニューの [開始] をクリックして、アプリケーションを実行します。
-
[Command1] をクリックします。
メッセージ ボックスに、"Function Returning False" と "Function Returning True" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって False が返されたことを示しています。
-
[Command2] をクリックします。
メッセージ ボックスに、"Function Returning True" と "Function Returning False" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって True が返されたことを示しています。
この出力結果は、Visual Basic 6.0 の論理 AND 演算子と論理 OR 演算子では常にオペランドのすべての式が評価されることを示しています。論理 AND 演算子の 1 つ目のオペランドが False と評価されると、結果は必ず False です。2 つ目のオペランドの値に関係なくこのような結果になります。その場合、2 つ目のオペランドの式の処理をスキップした方が効率的だと考えられます。同様に、論理 OR で 1 つ目のオペランドが True と評価されると、残りの式は必ず True と評価されます。そのため、コンパイラは残りのオペランドの評価をスキップして、コードを最適化することができます。ただし、この Visual Basic 6.0 の機能は、1 つ目のオペランドの値に関係なく必ずすべて実行する必要がある処理の場合に使用することができます。
Visual Basic 2005 または Visual Basic .NET のサンプル コード
Visual Basic 2005 または Visual Basic .NET でのショートサーキット評価手順を以下に示します。
-
Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET を起動します。
-
Visual Basic 2005 または Visual Basic .NET を使用して、Windows アプリケーションを新規作成します。
デフォルトでは、Form1 という名前のフォームが作成されます。
-
2 つのボタンを Form1 に追加します。
-
[Form1.vb] を右クリックし、[コードの表示] をクリックします。
-
[Windows フォーム デザイナで生成されたコード] の部分に次のコードを貼り付けます。
Public Function FalseFunc() As Boolean
MsgBox("Function Returning False")
FalseFunc = False
End Function
Public Function TrueFunc() As Boolean
MsgBox("Function Returning True")
TrueFunc = True
End Function
-
以下のコードを各ボタンの Click イベントのイベント ハンドラに追加します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If FalseFunc() And TrueFunc() Then
'Do Nothing
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If TrueFunc() Or FalseFunc() Then
MsgBox("Both function are called.")
End If
End Sub -
プロジェクトを保存して実行します。
-
[Button1] をクリックします。
メッセージ ボックスに、"Function Returning False" と "Function Returning True" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって False が返されたことを示しています。
-
[Button2] をクリックします。
メッセージ ボックスに、"Function Returning True" と "Function Returning False" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって True が返されたことを示しています。
この出力は、論理 AND 演算子および論理 OR 演算子が、Visual Basic 2005 および Visual Basic .NET で Visual Basic 6.0 と同じように処理されたことを示しています。デフォルトでは、Visual Basic 2005 および Visual Basic .NET の論理 AND 演算子および論理 OR 演算子ではショートサーキット評価は行われません。
Visual Basic 2005 または Visual Basic .NET のショートサーキット評価
Visual Basic 2005 または Visual Basic .NET では、論理 AND 演算子および論理 OR 演算子の代わりに、それぞれ AndAlso 演算子および OrElse 演算子を使用できます。これらの新しい演算子を使用すると、Visual Basic 2005 または Visual Basic .NET でショートサーキット評価を行うことができます。ショートサーキット評価を Visual Basic 2005 または Visual Basic .NET で行う手順を以下に示します。
-
Visual Studio 2005 または Visual Studio .NET を起動し、Visual Basic 2005 または Visual Basic .NET で Windows アプリケーションを新規作成します。
デフォルトで、Form1 が作成されます。
-
2 つのボタンを Form1 に追加します。
-
[Form1.vb] を右クリックし、[コードの表示] をクリックします。
-
[Windows フォーム デザイナで生成されたコード] の部分に次のコードを貼り付けます。
Private Function TrueFunc() As Boolean
MessageBox.Show("Function Returning True")
Return True
End Function
Private Function FalseFunc() As Boolean
MessageBox.Show("Function Returning False")
Return False
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If FalseFunc() AndAlso TrueFunc() Then
' Do Nothing
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If TrueFunc() OrElse FalseFunc() Then
MsgBox("Only TrueFunc is called.")
End If
End Sub
-
[デバッグ] メニューの [開始] (Visual Studio 2005 では [デバッグの開始]) をクリックして、アプリケーションを実行します。
-
[Button1] をクリックします。
"Function returning False" メッセージ ボックスが表示されます。
-
[Button2] をクリックします。
"Function returning True" メッセージ ボックスが表示されます。
詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。