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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow