Visual Basic .NET Language
ルーピング
サーチ…
For ...次へ
For
... Next
ループは、同じアクションを有限回数繰り返すために使用されます。次のループ内のステートメントは11回実行されます。初めて、 i
は値0を持っています、それは値1を持つ2回目、それは値10を持つ最後の時間です。
For i As Integer = 0 To 10
'Execute the action
Console.Writeline(i.ToString)
Next
整数式を使用してループをパラメータ化できます。制御変数(この場合i
)は、 Next
後にも記述することができますが、必須ではありません。制御変数は、 For
ステートメントではなく、事前に宣言することができます。
Dim StartIndex As Integer = 3
Dim EndIndex As Integer = 7
Dim i As Integer
For i = StartIndex To EndIndex - 1
'Execute the action
Console.Writeline(i.ToString)
Next i
開始および終了整数を定義できることにより、次のような他のオブジェクトを直接参照するループが作成されます。
For i = 0 to DataGridView1.Rows.Count - 1
Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next
これにより、 DataGridView1
すべての行がループされ、列1の値をコンソールに書き込む操作が実行されDataGridView1
。 (-1は、カウントされた行の最初の行が0ではなく1になるためです)
制御変数がどのように増加しなければならないかを定義することも可能です。
For i As Integer = 1 To 10 Step 2
Console.Writeline(i.ToString)
Next
これは、
1 3 5 7 9
制御変数を減らす(カウントダウンする)ことも可能です。
For i As Integer = 10 To 1 Step -1
Console.Writeline(i.ToString)
Next
これは、
10 9 8 7 6 5 4 3 2 1
ループ外で制御変数を使用(読み取りまたは更新)しないでください。
For Each ...アイテムのコレクションをループする次のループ
For Each...Next
ループを使用すると、任意のIEnumerable
型を反復処理できます。これには、配列、リストなど、IEnumerable型であるかIEnumerableを返すものが含まれます。
DataTableのRowsプロパティをループする例は、次のようになります。
For Each row As DataRow In DataTable1.Rows
'Each time this loops, row will be the next item out of Rows
'Here we print the first column's value from the row variable.
Debug.Print(Row.Item(0))
Next
注目すべき重要な点は、 For Each
ループ中にコレクションを変更してはならないことです。これを行うと、メッセージと共にSystem.InvalidOperationException
が発生します。
コレクションが変更されました。列挙操作が実行されないことがあります。
条件が真である間に反復するループ
While
ループは、条件を評価することによって開始されます。 trueの場合、ループの本体が実行されます。ループの本体が実行された後、 While
条件が再度評価されて、本体を再実行するかどうかが決定されます。
Dim iteration As Integer = 1
While iteration <= 10
Console.Writeline(iteration.ToString() & " ")
iteration += 1
End While
これは、
1 2 3 4 5 6 7 8 9 10
警告: While
ループは無限ループにつながります 。 iteration
をインクリメントするコード行が削除されたらどうなるか考えてみてください。そのような場合、条件は決して真ではなく、ループは無期限に継続する。
Do ... Loop
Do...Loop
を使用Do...Loop
ステートメントのブロックを繰り返すWhile
または条件が真になるUntil
、ループの始めまたは終わりのいずれかで条件をチェックします。
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
Loop While x < 10
または
Dim x As Integer = 0
Do While x < 10
Console.Write(x & " ")
x += 1
Loop
0 1 2 3 4 5 6 7 8 9
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
Loop Until x = 10
または
Dim x As Integer = 0
Do Until x = 10
Console.Write(x & " ")
x += 1
Loop
0 1 2 3 4 5 6 7 8 9
Continue Do
を使用すると、ループの次の繰り返しにスキップできます。
Dim x As Integer = 0
Do While x < 10
x += 1
If x Mod 2 = 0 Then
Continue Do
End If
Console.Write(x & " ")
Loop
1 3 5 7 9
Exit Do
ループを終了できます - この例では、条件がないと無限ループが発生します。
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
If x = 10 Then
Exit Do
End If
Loop
0 1 2 3 4 5 6 7 8 9
短絡
Exit
またはContinue
ステートメントを使用すると、ループが終了したり、いつでもどこでも早期にContinue
ます。
終了
早期に終了することでループを停止することができます。これを行うには、キーワードExit
ループの名前とともに使用します。
ループ | 出口ステートメント |
---|---|
にとって | Exit For |
For Each | Exit For |
一方を行います | Exit Do |
中 | Exit While |
ループを早期に終了することは、アプリケーションのニーズを満たすために必要な回数だけループすることで、パフォーマンスを向上させる素晴らしい方法です。以下は、番号2
が見つかるとループが終了する例です。
Dim Numbers As Integer() = {1,2,3,4,5}
Dim SoughtValue As Integer = 2
Dim SoughtIndex
For Each i In Numbers
If i = 2 Then
SoughtIndex = i
Exit For
End If
Next
Debug.Print(SoughtIndex)
続ける
早期に終了するだけでなく、次のループの繰り返しに進む必要があると判断することもできます。これは、 Continue
ステートメントを使用して簡単に実行できます。 Exit
と同様に、ループ名で処理されます。
ループ | 継続声明 |
---|---|
にとって | Continue For |
For Each | Continue For |
一方を行います | Continue Do |
中 | Continue While |
ここでは、合計に偶数が追加されないようにする例を示します。
Dim Numbers As Integer() = {1,2,3,4,5}
Dim SumOdd As Integer = 0
For Each i In Numbers
If Numbers(i) \ 2 = 0 Then Continue For
SumOdd += Numbers(i)
Next
使用上のアドバイス
Exit
またはContinue
を使用する代わりに、2つの方法を使用できます。
新しいブール変数を宣言し、1つの値に初期化し、条件付きでループ内の他の値に設定することができます。その変数に基づいて条件文( If
)を使用して、後続の反復でループ内の文の実行を回避します。
Dim Found As Boolean = False
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
If Not Found AndAlso A(i) = SoughtValue Then
FoundIndex = i
Found = True
End If
Next
この手法に対する異論の1つは、非効率的である可能性があることです。たとえば、上記の例でN
が1000000で、配列A
最初の要素がSoughtValue
に等しい場合、ループは何も役立たずにさらに999999回繰り返されます。しかしながら、この技術は、場合によってはより明瞭であるという利点を有することができる。
GoTo
ステートメントを使用して、ループから飛び出すことができます。 GoTo
を使用してループにジャンプすることはできません。
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
If A(i) = SoughtValue Then
FoundIndex = i
GoTo Found
End If
Next
Debug.Print("Not found")
Found:
Debug.Print(FoundIndex)
このテクニックは、ループから飛び出して、ループの自然な終わりの直後に実行される1つ以上のステートメントを避ける最もきれいな方法です。
効率性、コードの記述速度、可読性(したがって保守性)などを考慮して、すべての代替案を検討し、要件に最も適したものを使用する必要があります。
最善の選択肢である場合には、それらの機会にGoTo
を使用しないでください。
ネストループ
A nested loop is a loop within a loop, an inner loop within the body of an outer one. How this works is that the first pass of the outer loop triggers the inner loop, which executes to completion. Then the second pass of the outer loop triggers the inner loop again. This repeats until the outer loop finishes. a break within either the inner or outer loop would interrupt this process.
次のネストされたループの構造は次のとおりです。
For counter1=startNumber to endNumber (Step increment)
For counter2=startNumber to endNumber (Step increment)
One or more VB statements
Next counter2
Next counter1
例:
For firstCounter = 1 to 5
Print “First Loop of ” + firstCounter
For secondCounter= 1 to 4
Print “Second Loop of ” + secondCounter
Next secondCounter
Next firstCounter