While...End While ステートメント (Visual Basic)

指定された条件が True である限り、一連のステートメントを実行します。

構文

While condition
    [ statements ]
    [ Continue While ]
    [ statements ]
    [ Exit While ]
    [ statements ]
End While

指定項目

用語 定義
condition 必須です。 Boolean 式。 conditionNothing の場合、Visual Basic ではそれを False として扱います。
statements 任意。 While の後の 1 つ以上のステートメント。conditionTrue であるたびに実行されます。
Continue While 任意。 While ブロックの次の反復に制御を渡します。
Exit While 任意。 While ブロックから制御を渡します。
End While 必須です。 While ブロックの定義を終了します。

Remarks

条件が True のままである限り、一連のステートメントを無限に繰り返す場合は、While...End While 構造体を使用します。 条件をテストする場所またはテストで求める結果に関してより柔軟性を必要とする場合は、Do...Loop ステートメントを使用することをお勧めします。 設定した回数だけステートメントを繰り返す場合は、通常、For...Next ステートメントの方が適しています。

注意

While キーワードは、Do...Loop ステートメントSkip While 句、および Take While 句でも使用します。

conditionTrue である場合、End While ステートメントが検出されるまで、すべての statements が実行されます。 その後、制御が While ステートメントに戻り、condition が再度チェックされます。 condition がまだ True である場合は、プロセスが繰り返されます。 False である場合は、制御が End While ステートメントの後のステートメントに渡されます。

While ステートメントでは、ループを開始する前に常に条件がチェックされます。 ループは、条件が True のままである間続行されます。 最初にループに入ったときに conditionFalse である場合は、1 回も実行されません。

通常、condition は 2 つの値の比較の結果になりますが、ブール データ型の値 (True または False) に評価される任意の式を使用することもできます。 この式には、Boolean に変換された別のデータ型 (数値型など) の値を含めることができます。

While ループを入れ子にするには、別のループ内にループを配置します。 また、さまざまな種類の制御構造を相互に入れ子にすることもできます。 詳細については、「入れ子になった制御構造」を参照してください。

Exit While

Exit While ステートメントでは、While ループを終了する別の方法を提供できます。 Exit While では End While ステートメントの次のステートメントに制御が直ちに渡されます。

Exit While は一般に、何らかの条件を評価した (If...Then...Else ストラクチャなどで) 後に使用します。 誤った値や終了要求など、反復処理を続行することが不要になるか、不可能になる状況を検出した場合に、ループを終了させたいことがあります。 Exit While は、無限ループを引き起こす可能性がある条件をテストする場合に使用できます。無限ループは、膨大な回数または無限に実行する可能性があるループです。 そこで、Exit While を使用すると、ループから抜け出すことができます。

While ループ内の任意の場所に、任意の数の Exit While ステートメントを配置できます。

入れ子になった While ループ内で使用した場合、Exit While では最も内側のループから次の上位レベルの入れ子に制御が渡されます。

Continue While ステートメントでは、ループの次の反復に直ちに制御が渡されます。 詳細については、「Continue ステートメント」を参照してください。

例 1

次の例では、ループ内のステートメントは index 変数が 10 を超えるまで実行されます。

Dim index As Integer = 0
While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
End While

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

例 2

次の例では、Continue While および Exit While ステートメントの使用方法を示しています。

Dim index As Integer = 0
While index < 100000
    index += 1

    ' If index is between 5 and 7, continue
    ' with the next iteration.
    If index >= 5 And index <= 8 Then
        Continue While
    End If

    ' Display the index.
    Debug.Write(index.ToString & " ")

    ' If index is 10, exit the loop.
    If index = 10 Then
        Exit While
    End If
End While

Debug.WriteLine("")
' Output: 1 2 3 4 9 10

例 3

次の例では、テキスト ファイル内のすべての行を読み取っています。 OpenText メソッドでは、ファイルを開いて、文字を読み取る StreamReader が返されます。 While 条件では、StreamReaderPeek メソッドによって、ファイルに追加の文字が含まれるかどうかが判断されます。

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)

        While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        End While

        sr.Close()
    End If
End Sub

関連項目