Do...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 が使用されている場合は指定できません。 condition が False になるまでループを繰り返します。 |
Until |
While が使用されている場合は指定できません。 condition が True になるまでループを繰り返します。 |
condition |
任意。 Boolean 式。 condition が Nothing の場合、Visual Basic ではそれを False として扱います。 |
statements |
任意。 condition が True である間、またはその状態になるまで繰り返される、1 つまたは複数のステートメント。 |
Continue Do |
任意。 Do ループの次の反復に制御を渡します。 |
Exit Do |
任意。 Do ループから制御を移します。 |
Loop |
必須です。 Do ループの定義を終了します。 |
Remarks
条件が満たされるまで、一連のステートメントを無限に繰り返す場合は、Do...Loop
構造体を使用します。 ステートメントを設定した回数だけ繰り返す場合は、通常、For...Next ステートメントのほうが適しています。
While
または Until
のいずれかを使用して condition
を指定できますが、両方を指定することはできません。 どちらも指定しない場合、ループは、Exit
転送制御がループから外れるまで続行されます。
condition
は、ループの開始時または終了時に 1 回だけテストできます。 ループの開始時に (Do
ステートメントで) condition
をテストする場合、ループは 1 回も実行されない可能性があります。 ループの最後に (Loop
ステートメントで) テストする場合、ループは少なくとも 1 回は必ず実行されます。
通常、条件は 2 つの値を比較することによって判断されますが、ブール データ型の値 (True
または False
) に評価される任意の式を使用することもできます。 これには、Boolean
に変換されたその他のデータ型 (数値型など) の値が含まれます。
Do
ループを入れ子にするには、別のループ内にループを配置します。 また、さまざまな種類の制御構造を相互に入れ子にすることもできます。 詳細については、「入れ子になった制御構造」を参照してください。
注意
Do...Loop
構造は、While...End While ステートメントよりも柔軟性があります。condition
が True
でなくなったとき、または初めて 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
条件では、StreamReader
の Peek メソッドによって、追加の文字があるかどうかが判別されます。
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
関連項目
.NET