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) である間、または真になるまで繰り返し実行される、任意の行数のステートメントを記述します。 |
Continue Do |
省略可能。 Do のループの次の反復処理に制御を移します。 |
Exit Do |
省略可能。 制御を Do ループの外に移します。 |
Loop |
必須。 Do ループの定義を終了します。 |
解説
Do...Loop は一連のステートメントを、条件が満たされるまで何度でも繰り返し実行する場合に使用します。 設定した回数だけステートメントを繰り返す場合は、For...Next Statement を選択した方が通常は便利です。
While と Until のいずれかを使用して condition を指定しますが、両方は使用できません。
condition はループの最初または終わりに 1 回だけテストできます。 condition をループの最初に (Do ステートメント内で) テストする場合、ループが一度も実行されないことがあります。 ループの終わりに (Loop ステートメント内で) テストする場合、ループは必ず少なくとも 1 回は実行されます。
条件は、通常、2 つの値の比較によって判断されますが、ブール型 (Boolean) (Visual Basic) 値 (True または False) として評価できる式の場合どのような式でも指定できます。 指定できる値には、数値型などのその他のデータ型を Boolean に変換した値も含まれます。
Do ループは入れ子構造にできます。つまり、ループの中に別のループを入れることができます。 また、さまざまな種類の制御構造を入れ子にすることもできます。 詳細については、「入れ子になった制御構造 (Visual Basic)」を参照してください。
注意
Do...Loop 構造を使用すると、condition が真 (True) でなくなったときにループを終了するのか、それとも最初に True になったときに終了するのかを判断できるので、While...End While ステートメント (Visual Basic) を使用するよりも柔軟性が増します。また、condition をループの最初にテストすることも、ループの終わりにテストすることもできます。
Exit Do
Exit Do ステートメントを使用すると、別の方法で Do…Loop を終了できます。 Exit Do は、Loop ステートメントの次のステートメントにすぐに制御を移します。
Exit Do は、If...Then...Else 構造の中などで、なんらかの条件を評価した後によく使用されます。 ループの継続が不要になったり不可能になったりする条件 (エラー値や終了要求など) を検出した場合にループを終了できます。 Exit Do は、無限ループを引き起こす可能性がある条件をテストする場合などに使用されます。無限ループは、実行回数が多くなる (または無限に繰り返される) ループです。 Exit Do を使用してループから抜けることができます。
Exit Do ステートメントは、Do…Loop の任意の場所に何度でも使用できます。
入れ子構造になっている 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
次の例では、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
次の例では、index 変数が 100 を上回ったときに、condition によってループが停止されます。 ただし、ループ内の If ステートメントにより、index 変数が 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
次の例では、テキスト ファイルのすべての行が読み取られます。 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
参照
関連項目
For...Next ステートメント (Visual Basic)
While...End While ステートメント (Visual Basic)