Help and Support

文書番号: 817250 - 最終更新日: 2007年12月3日 - リビジョン: 3.3

Visual Basic での "ショートサーキット" 評価の説明

目次

すべて展開する | すべて折りたたむ

概要

論理 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 でのショートサーキット評価について確認するための手順を以下に示します。
  1. Visual Basic 6.0 を起動し、新しい標準 EXE プロジェクトを作成します。

    デフォルトでは、Form1 という名前のフォームが作成されます。
  2. フォームに 2 つの Command ボタンを追加します。
  3. [Form1] を右クリックし、[コードの表示] をクリックします。
  4. 次のコードを 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
    
  5. [実行] メニューの [開始] をクリックして、アプリケーションを実行します。
  6. [Command1] をクリックします。

    メッセージ ボックスに、"Function Returning False" と "Function Returning True" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって False が返されたことを示しています。
  7. [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 でのショートサーキット評価手順を以下に示します。
  1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET を起動します。
  2. Visual Basic 2005 または Visual Basic .NET を使用して、Windows アプリケーションを新規作成します。

    デフォルトでは、Form1 という名前のフォームが作成されます。
  3. 2 つのボタンを Form1 に追加します。
  4. [Form1.vb] を右クリックし、[コードの表示] をクリックします。
  5. [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
    
  6. 以下のコードを各ボタンの 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
  7. プロジェクトを保存して実行します。
  8. [Button1] をクリックします。

    メッセージ ボックスに、"Function Returning False" と "Function Returning True" が表示されます。これらのメッセージは、両方の関数が実行され、1 つ目のオペランドによって False が返されたことを示しています。
  9. [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 で行う手順を以下に示します。
  1. Visual Studio 2005 または Visual Studio .NET を起動し、Visual Basic 2005 または Visual Basic .NET で Windows アプリケーションを新規作成します。

    デフォルトで、Form1 が作成されます。
  2. 2 つのボタンを Form1 に追加します。
  3. [Form1.vb] を右クリックし、[コードの表示] をクリックします。
  4. [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
    
  5. [デバッグ] メニューの [開始] (Visual Studio 2005 では [デバッグの開始]) をクリックして、アプリケーションを実行します。
  6. [Button1] をクリックします。

    "Function returning False" メッセージ ボックスが表示されます。
  7. [Button2] をクリックします。

    "Function returning True" メッセージ ボックスが表示されます。

関連情報

詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconbooleanoperatorchanges.asp (http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconbooleanoperatorchanges.asp)

この資料は以下の製品について記述したものです。
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
キーワード:?
kbinfo kbprogramming kbforms kbcompiler kbvs2005applies kbvs2005swept KB817250
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

サポート技術情報の翻訳