Visual Basic .NET Language
En boucle
Recherche…
Pour ... Suivant
Next
boucle For
... Next
est utilisée pour répéter la même action pour un nombre fini de fois. Les instructions à l'intérieur de la boucle suivante seront exécutées 11 fois. La première fois, i
la valeur 0, la deuxième fois la valeur 1, la dernière fois 10.
For i As Integer = 0 To 10
'Execute the action
Console.Writeline(i.ToString)
Next
Toute expression entière peut être utilisée pour paramétrer la boucle. Il est permis, mais pas obligatoire, que la variable de contrôle (dans ce cas i
) soit également indiquée après la Next
. Il est permis que la variable de contrôle soit déclarée à l'avance, plutôt que dans l'instruction 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
La possibilité de définir les entiers de début et de fin permet de créer des boucles qui référencent directement d'autres objets, telles que:
For i = 0 to DataGridView1.Rows.Count - 1
Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next
Cela ferait alors une boucle sur chaque ligne de DataGridView1
et effectuerait l'action d'écrire la valeur de la colonne 1 dans la console. (Le -1 est parce que la première ligne des lignes comptées serait 1, pas 0)
Il est également possible de définir comment la variable de contrôle doit s'incrémenter.
For i As Integer = 1 To 10 Step 2
Console.Writeline(i.ToString)
Next
Cela produit:
1 3 5 7 9
Il est également possible de décrémenter la variable de contrôle (décompte).
For i As Integer = 10 To 1 Step -1
Console.Writeline(i.ToString)
Next
Cela produit:
10 9 8 7 6 5 4 3 2 1
Vous ne devez pas essayer d'utiliser (lire ou mettre à jour) la variable de contrôle en dehors de la boucle.
For Each ... Prochaine boucle pour boucler la collection d'éléments
Vous pouvez utiliser une boucle For Each...Next
pour parcourir tout type IEnumerable
. Cela inclut les tableaux, les listes et tout ce qui peut être de type IEnumerable ou renvoie un IEnumerable.
Un exemple de boucle à travers une propriété Rows de DataTable ressemblerait à ceci:
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
Une chose importante à noter est que la collection ne doit pas être modifiée dans une boucle For Each
. Cela entraînera une System.InvalidOperationException
avec le message:
La collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter.
Boucle while à itérer alors qu'une condition est vraie
Une boucle While
commence par évaluer une condition. Si c'est vrai, le corps de la boucle est exécuté. Une fois le corps de la boucle exécuté, la condition While
est à nouveau évaluée pour déterminer s'il convient de réexécuter le corps.
Dim iteration As Integer = 1
While iteration <= 10
Console.Writeline(iteration.ToString() & " ")
iteration += 1
End While
Cela produit:
1 2 3 4 5 6 7 8 9 10
Attention: Une boucle While
peut mener à une boucle infinie . Considérez ce qui se passerait si la ligne de code qui incrémentait l' iteration
était supprimée. Dans un tel cas, la condition ne serait jamais vraie et la boucle continuerait indéfiniment.
Do ... Loop
Utilisez Do...Loop
pour répéter un bloc d'instructions While
ou Until
une condition est vraie, en vérifiant la condition au début ou à la fin de la boucle.
Dim x As Integer = 0
Do
Console.Write(x & " ")
x += 1
Loop While x < 10
ou
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
ou
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
peut être utilisé pour passer à la prochaine itération de la boucle:
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
Vous pouvez terminer la boucle avec Exit Do
- notez que dans cet exemple, l'absence de condition provoquerait une boucle infinie:
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
Court circuit
Toute boucle peut être terminée ou poursuivie à tout moment en utilisant les instructions Exit
ou Continue
.
Sortie
Vous pouvez arrêter n'importe quelle boucle en quittant tôt. Pour ce faire, vous pouvez utiliser le mot-clé Exit
avec le nom de la boucle.
Boucle | Déclaration de sortie |
---|---|
Pour | Exit For |
Pour chaque | Exit For |
Faire pendant | Exit Do |
Tandis que | Exit While |
Quitter une boucle tôt est un excellent moyen d'améliorer les performances en ne bouclant que le nombre de fois nécessaire pour répondre aux besoins de l'application. Vous trouverez ci-dessous un exemple où la boucle sortira une fois le numéro 2
trouvé.
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
Avec la sortie anticipée, vous pouvez également décider de passer à la prochaine itération de la boucle. Cela se fait facilement en utilisant l'instruction Continue
. Tout comme Exit
, il est procédé au nom de la boucle.
Boucle | Continuer déclaration |
---|---|
Pour | Continue For |
Pour chaque | Continue For |
Faire pendant | Continue Do |
Tandis que | Continue While |
Voici un exemple d'empêcher l'ajout de nombres pairs à la somme.
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
Conseil d'utilisation
Deux techniques alternatives peuvent être utilisées au lieu d'utiliser Exit
ou Continue
.
Vous pouvez déclarer une nouvelle variable booléenne en l'initialisant à une valeur et en la définissant conditionnellement sur l'autre valeur dans la boucle. Vous utilisez ensuite une instruction conditionnelle (par exemple If
) basée sur cette variable pour éviter l'exécution des instructions dans la boucle dans les itérations suivantes.
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
L'une des objections à cette technique est qu'elle peut être inefficace. Par exemple, si dans l'exemple ci-dessus, N
est 1000000 et que le premier élément du tableau A
est égal à SoughtValue
, la boucle SoughtValue
999999 autres fois sans rien faire d'utile. Cependant, cette technique peut avoir l'avantage d'une plus grande clarté dans certains cas.
Vous pouvez utiliser l'instruction GoTo
pour sortir de la boucle. Notez que vous ne pouvez pas utiliser GoTo
pour sauter dans une boucle.
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)
Cette technique peut parfois être le moyen le plus simple de sortir de la boucle et d'éviter une ou plusieurs instructions exécutées juste après la fin de la boucle.
Vous devez envisager toutes les alternatives et utiliser celle qui correspond le mieux à vos besoins, en tenant compte de l'efficacité, de la rapidité de rédaction du code et de la lisibilité (et donc de la maintenance).
Ne vous laissez pas GoTo
par GoTo
dans les cas où il s'agit de la meilleure alternative.
Boucle imbriquée
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.
La structure d'une boucle imbriquée For Next est:
For counter1=startNumber to endNumber (Step increment)
For counter2=startNumber to endNumber (Step increment)
One or more VB statements
Next counter2
Next counter1
Exemple :
For firstCounter = 1 to 5
Print “First Loop of ” + firstCounter
For secondCounter= 1 to 4
Print “Second Loop of ” + secondCounter
Next secondCounter
Next firstCounter