Description of "short-circuit" evaluation in Visual Basic (817250)
The information in this article applies to:
- Microsoft .NET Framework 2.0
- Microsoft .NET Framework 1.1
- Microsoft .NET Framework 1.0
- Microsoft Visual Basic 2005
- Microsoft Visual Basic .NET (2003)
- Microsoft Visual Basic .NET (2002)
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
- Microsoft Visual Basic Learning Edition for Windows 6.0
- Microsoft Visual Basic Professional Edition for Windows 6.0
SUMMARYThe operands of logical-AND expressions and logical-OR expressions are evaluated from left to right. If the value of the
first operand is sufficient to determine the result of the operation, the
second operand is not evaluated. This is refered to as short-circuit
evaluation. This article discusses short-circuit evaluation of the logical-AND operator and of the logical-OR operator in Microsoft Visual Basic 2005 or in Microsoft Visual Basic .NET.
In Visual Basic 2005 or in Visual
Basic .NET, both the operands of logical-AND expressions and logical-OR expressions are evaluated, irrespective of the result of the first operand.
These operators do not behave as they do in Microsoft Visual C# .NET. Instead
these operators behave similar to the way they behave in Microsoft Visual Basic
6.0. Therefore, the logical-AND operator and the logical-OR operator do not follow short-circuit evaluation. However,
there are two new operators in Visual Basic 2005 or in Visual
Basic .NET. These are the AndAlso operator and the OrElse operator. You can use these operators instead of the logical-AND operator and the logical-OR operator, respectively. You can have short-circuit evaluation
functionality in Visual Basic .NET by using these operators.MORE INFORMATIONSample code in Visual Basic 6.0The following proceedure demonstrates short-circuit
evaluation in Visual Basic 6.0.
- Start Visual Basic 6.0, and then create a new Standard EXE
project.
By default, a form that is named Form1 is created. - Add two Command buttons to the
form.
- Right-click Form1, and then click
View Code.
- Add the following code to the Form1 form.
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
- On the Run menu, click
Start to run the application.
- Click Command1.
Messages boxes
display Function Returning False and Function
Returning True. These messages indicate that both functions are running, but
the first operand returns False. - Click Command2.
Message boxes
display Function Returning True and Function Returning
False. These messages indicate that both functions are running, but the first
operand returns True.
In Visual Basic 6.0, the output indicates that the logical-AND operator and the logical-OR operator always evaluate all the expressions in their operands.
When the first operand of the logical-AND operator evaluates to False, the result always evaluates to False. This occurs irrespective of the value of the second operand. In
such cases, it may seem more efficient to skip processing the expressions of
the second operand. Similarly, if the first operand evaluates to True for the logical-OR operator, the remaining expression always evaluates to True. Therefore, the compiler can skip evaluating the remaining
operands to create an optimized code. However, you can use this Visual Basic
6.0 feature to perform some processing that must always be completed,
irrespective of the value of the first operand. Sample code in Visual Basic 2005 or in Visual Basic .NETThe following section demonstrates short-circuit evaluation
in Visual Basic 2005 or in Visual Basic .NET.
- Start Microsoft Visual Studio 2005 or Microsoft Visual Studio .NET.
- Create a new Windows application by using Visual Basic 2005 or Visual Basic .NET.
By default, a form that is named Form1 is created. - Add two buttons to the Form1 form.
- Right-click Form1.vb, and then click
View Code.
- Append the following code in the Windows Form
Designer generated code region.
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
- Add the following event handlers for the
Click events of each button.
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 - Save and then run the project.
- Click Button1.
Message boxes
display Function Returning False and Function
Returning True. These messages indicate that both functions are running, but
the first operand returns False. - Click Button2.
Message boxes
display Function Returning True and Function Returning
False. These messages indicate that both functions are running, but the first
operand returns True.
The output indicates that the logical-AND operator and the logical-OR operator are treated the same way in Visual Basic 2005 or in Visual Basic .NET as they
are treated in Visual Basic 6.0. By default, short-circuit evaluation does
not occur with Visual Basic 2005 or with Visual Basic .NET with the logical-AND operator and the logical-OR operator. Short-circuit evaluation in Visual Basic 2005 or in Visual Basic .NETIn Visual Basic 2005 or in Visual Basic .NET, you can use the AndAlso operator and the OrElse operator instead of the logical-AND operator and the logical-OR operator, respectively. You can have short-circuit evaluation
functionality in Visual Basic 2005 or in Visual Basic .NET by using these new operators. The following
steps demonstrate short-circuit evaluation in Visual Basic 2005 or in Visual Basic .NET:
- Start Visual Studio 2005 or Visual Studio .NET, and then create a new Windows
application by using Visual Basic 2005 or Visual Basic .NET.
By default,
Form1 is created. - Add two buttons to Form1.
- Right-click Form1.vb, and then click
View Code.
- Append the following code in the Windows Form
Designer generated code region.
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
- On the Debug menu, click
Start to run the application.
- Click Button1.
The
Function returning False message box is displayed. - Click Button2.
The Function returning True message box is displayed.
REFERENCESFor more information, visit the following Microsoft Developer Network (MSDN) Web
site:
Modification Type: | Minor | Last Reviewed: | 10/3/2006 |
---|
Keywords: | kbvs2005swept kbvs2005applies kbProgramming kbForms kbCompiler kbinfo KB817250 kbAudDeveloper |
---|
|