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 ループの定義を終了します。 |
注釈
条件が満たされるまで、一連のステートメントを不定回数繰り返す場合は、 Do...Loop
構造体を使用します。 ステートメントを一定回数繰り返す場合は、 For...通常、次のステートメント の方が適しています。
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