次の方法で共有


する。。。Loop ステートメント (Visual Basic)

Boolean条件がTrueされている間、または条件がTrueになるまで、ステートメントのブロックを繰り返します。

構文

Do [ { While | Until } condition ]
    [ statements ]
    [ Continue Do ]
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
' -or-
Do
    [ statements ]
    [ Continue Do ]
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop [ { While | Until } condition ]

部品

任期 定義
Do 必須。 Do ループの定義を開始します。
While Untilが使用されている場合は指定できません。 conditionFalseされるまでループを繰り返します。
Until Whileが使用されている場合は指定できません。 conditionTrueされるまでループを繰り返します。
condition 任意。 Boolean 表現。 conditionNothingされている場合、Visual Basic はそれをFalseとして扱います。
statements 任意。 conditionTrueされるまで繰り返される 1 つ以上のステートメント。
Continue Do 任意。 Do ループの次のイテレーションに制御を転送します。
Exit Do 任意。 Do ループから制御を転送します。
Loop 必須。 Do ループの定義を終了します。

注釈

条件が満たされるまで、一連のステートメントを不定回数繰り返す場合は、 Do...Loop 構造体を使用します。 ステートメントを一定回数繰り返す場合は、 For...通常、次のステートメント の方が適しています。

WhileまたはUntilを使用してconditionを指定できますが、両方を指定することはできません。 どちらも指定しない場合、ループは、 Exit 転送制御がループから外れるまで続行されます。

conditionは、ループの開始時または終了時に 1 回だけテストできます。 (Do ステートメントで) ループの開始時にconditionをテストすると、ループが 1 回も実行されないことがあります。 ループの最後 ( Loop ステートメント内) でテストする場合、ループは常に少なくとも 1 回実行されます。

通常、条件は 2 つの値の比較から得られますが、 ブール型の値 (True または False) に評価される任意の式を指定できます。 これには、 Booleanに変換された他のデータ型 (数値型など) の値が含まれます。

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

Do...Loop構造を使用すると、While... よりも柔軟性が高くなります。End While ステートメントを使用すると、conditionTrueを停止したとき、または最初にTrueになったときにループを終了するかどうかを決定できるためです。 また、ループの開始時または終了時に condition をテストすることもできます。

Exit Do

Exit Do ステートメントは、Do…Loopを終了する別の方法を提供できます。 Exit Do は、 Loop ステートメントの直後のステートメントに制御を転送します。

Exit Do は、 If...Then...Else 構造体など、何らかの条件が評価された後によく使用されます。 誤った値や終了要求など、反復を続ける必要がなくなったり不可能になる条件を検出した場合は、ループを終了できます。 Exit Doの用途の 1 つは、無限ループを引き起こす可能性のある条件をテストすることです。これは、ループが多数または無限の回数実行される可能性があります。 Exit Doを使用してループをエスケープできます。

Do…Loopの任意の場所に任意の数のExit Doステートメントを含めることができます。

入れ子になった Do ループ内で使用すると、 Exit Do は最も内側のループから次の上位レベルの入れ子に制御を転送します。

例 1

次の例では、 index 変数が 10 より大きくなるまで、ループ内のステートメントは引き続き実行されます。 Until句はループの末尾にあります。

Dim index As Integer = 0
Do
    Debug.Write(index.ToString & " ")
    index += 1
Loop Until index > 10

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

例 2

次の例では、Until 句の代わりに While 句を使用し、conditionはループの先頭ではなく末尾でテストされます。

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

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

例 3

次の例では、index変数が 100 より大きい場合、conditionはループを停止します。 ただし、ループ内の If ステートメントでは、インデックス変数が 10 より大きい場合、 Exit Do ステートメントはループを停止します。

Dim index As Integer = 0
Do While index <= 100
    If index > 10 Then
        Exit Do
    End If

    Debug.Write(index.ToString & " ")
    index += 1
Loop

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

例 4

次の例では、テキスト ファイル内のすべての行を読み取ります。 OpenText メソッドはファイルを開き、文字を読み取るStreamReaderを返します。 Do...Loop条件では、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)

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

        sr.Close()
    End If
End Sub

こちらも参照ください