Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Répète un groupe d’instructions tant que le compteur de boucle se rapproche de sa valeur finale.
Syntaxe
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Pièces
| Partie | Descriptif |
|---|---|
counter |
Obligatoire dans l’instruction For. Variable numérique. Variable de contrôle pour la boucle. Pour plus d’informations, consultez Contre-argument plus loin dans cette rubrique. |
datatype |
Optionnel. Type de données de counter. Pour plus d’informations, consultez Contre-argument plus loin dans cette rubrique. |
start |
Obligatoire. Expression numérique. Valeur initiale de counter. |
end |
Obligatoire. Expression numérique. Valeur finale de counter. |
step |
Optionnel. Expression numérique. Quantité par laquelle counter est incrémentée chaque fois par le biais de la boucle. |
statements |
Optionnel. Une ou plusieurs instructions entre For et Next qui exécutent le nombre de fois spécifié. |
Continue For |
Optionnel. Transfère le contrôle à l’itération de boucle suivante. |
Exit For |
Optionnel. Transfère le contrôle hors de la For boucle. |
Next |
Obligatoire. Termine la définition de la For boucle. |
Remarque
Le To mot clé est utilisé dans cette instruction pour spécifier la plage du compteur. Vous pouvez également utiliser ce mot clé dans l’instruction Select…Case et dans les déclarations de tableau. Pour plus d’informations sur les déclarations de tableau, consultez Instruction Dim.
Exemples simples
Vous utilisez une Forstructure ...Next lorsque vous souhaitez répéter un ensemble d’instructions un nombre défini de fois.
Dans l’exemple suivant, la variable index commence avec une valeur de 1 et est incrémentée à chaque itération de la boucle, et se termine lorsque la valeur de index atteint 5.
For index As Integer = 1 To 5
Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
Dans l’exemple suivant, la number variable commence à 2 et est réduite de 0,25 sur chaque itération de la boucle, se terminant une fois la valeur atteinte number à 0. L’argument Step de -.25 réduit la valeur de 0,25 à chaque itération de la boucle.
For number As Double = 2 To 0 Step -0.25
Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0
Conseil / Astuce
Un instruction While...End While ou instruction Do...Loop fonctionne bien lorsque vous ne savez pas à l'avance combien de fois les instructions doivent être exécutées dans la boucle. Toutefois, lorsque vous prévoyez d’exécuter la boucle un nombre spécifique de fois, une Forboucle ...Next est un meilleur choix. Vous déterminez le nombre d'itérations lorsque vous entrez dans la boucle pour la première fois.
Boucles d’imbrication
Vous pouvez imbriquer des boucles For en plaçant une boucle à l'intérieur d'une autre. L’exemple suivant illustre des structures For imbriquées Next qui ont des valeurs d’étape différentes. La boucle externe crée une chaîne pour chaque itération de la boucle. La boucle interne décrémente une variable de compteur pour chaque itération de la boucle.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Append to the StringBuilder every third number
' from 20 to 1 descending.
For indexB = 20 To 1 Step -3
sb.Append(indexB.ToString)
sb.Append(" ")
Next indexB
' Display the line.
Debug.WriteLine(sb.ToString)
Next indexA
' Output:
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
Lors de l’imbrication de boucles, chaque boucle doit avoir une variable unique counter .
Vous pouvez également imbriquer différents types de structures de contrôle entre elles. Pour plus d’informations, consultez Structures de contrôle imbriquées.
Exit For et Continue For
L’instruction Exit For quitte immédiatement le For…
Next boucle et transfère le contrôle à l’instruction qui suit l’instruction Next .
L’instruction transfère immédiatement le contrôle Continue For à l’itération suivante de la boucle. Pour en savoir plus, consultez Instruction Continue.
L’exemple suivant illustre l’utilisation des instructions Continue For et Exit For.
For index As Integer = 1 To 100000
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 AndAlso index <= 8 Then
Continue For
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Vous pouvez placer n’importe quel nombre d’instructions Exit For dans un For... Boucle Next. Lorsqu’il est utilisé dans une structure imbriquée For...
Next effectue une boucle, Exit For quitte la boucle la plus interne et transfère le contrôle au niveau supérieur suivant d’imbrication.
Exit For est souvent utilisé après avoir évalué une condition (par exemple, dans un If...Then...Else structure). Vous souhaiterez peut-être utiliser Exit For pour les conditions suivantes :
Continuer à itérer est inutile ou impossible. Une valeur erronée ou une demande d’arrêt peut créer cette condition.
Une
Try...Catch...Finallyinstruction intercepte une exception. Vous pouvez utiliserExit Forà la fin duFinallybloc.Vous disposez d'une boucle infinie, qui est une boucle qui peut s'exécuter un grand nombre de fois ou même un nombre infini de fois. Si vous détectez une telle condition, vous pouvez l’utiliser
Exit Forpour échapper à la boucle. Pour plus d’informations, consultez Instruction Do...Loop.
Implémentation technique
Lorsqu’une Forboucle ...Next démarre, Visual Basic évalue start, endet step. Visual Basic évalue ces valeurs uniquement pour l’instant, puis les start affecte à counter. Avant l'exécution du bloc d'instructions, Visual Basic compare counter à end. If counter est déjà supérieur à la valeur end (ou inférieur si step est négatif), la boucle For se termine et le contrôle transmet l’instruction qui suit l’instruction Next. Sinon, le bloc d’instructions s’exécute.
Chaque fois que Visual Basic rencontre l’instruction Next, il incrémente counter de step et retourne à l’instruction For. Encore une fois, counter est comparé à end, et il exécute le bloc ou quitte la boucle, selon le résultat. Le processus continue jusqu'à ce que counter dépasse end ou qu'une instruction Exit For soit rencontrée.
La boucle ne s’arrête pas tant que counter n’a pas passé end. Si counter elle est égale à end, la boucle se poursuit. Comparaison qui détermine s’il faut exécuter le bloc est counter<= end s’il step est positif etcounter> = end s’il step est négatif.
Si vous modifiez la valeur de counter lorsque vous êtes à l'intérieur d'une boucle, votre code peut être plus difficile à lire et à déboguer. La modification de la valeur start, end ou step n’affecte pas les valeurs d’itération qui ont été déterminées lors de la première entrée de la boucle.
Si vous imbriquez des boucles, le compilateur signale une erreur s’il rencontre l’instruction Next d’un niveau d’imbrication externe avant l’instruction Next d’un niveau interne. Toutefois, le compilateur peut détecter cette erreur qui se chevauche uniquement si vous spécifiez counter dans chaque Next instruction.
Argument d’étape
La valeur de step peut être positive ou négative. Ce paramètre détermine le traitement de boucles en fonction du tableau suivant :
| Valeur de l’étape | La boucle s’exécute si |
|---|---|
| Positif ou zéro |
counter
<= end |
| Négatif |
counter
>= end |
La valeur par défaut est step 1.
Contre-argument
Le tableau suivant indique si counter définit une nouvelle variable locale ayant une portée sur l'intégralité de la boucle For…Next. Cette détermination dépend de la présence de datatype et de la définition préalable de counter.
Est-ce que datatype est présent ? |
Est-ce que counter est déjà défini ? |
Résultat (indique si une nouvelle variable locale counter est couverte par l'ensemble de la boucle For...Next) |
|---|---|---|
| Non | Oui | Non, car counter est déjà défini. Si l’étendue de counter n’est pas locale à la procédure, un avertissement de compilation se produit. |
| Non | Non | Oui. Le type de données est déduit des expressions start, end, et step. Pour plus d’informations sur l’inférence de type, consultez l’instruction Option Infer et l’inférence de type local. |
| Oui | Oui | Oui, mais uniquement si la variable existante counter est définie en dehors de la procédure. Cette variable reste distincte. Si l’étendue de la variable existante counter est locale dans la procédure, une erreur au moment de la compilation se produit. |
| Oui | Non | Oui. |
Le type de données de counter détermine le type de l’itération, qui doit être l’un des types suivants :
A
Byte,SByte,UShort,Short,UInteger,Integer,ULong,Long,Decimal,SingleouDouble.Énumération que vous déclarez à l’aide d’une instruction Enum.
Élément
Object.TType qui a les opérateurs suivants, oùBest un type qui peut être utilisé dans uneBooleanexpression.Public Shared Operator >= (op1 As T, op2 As T) As BPublic Shared Operator <= (op1 As T, op2 As T) As BPublic Shared Operator - (op1 As T, op2 As T) As TPublic Shared Operator + (op1 As T, op2 As T) As T
Vous pouvez éventuellement spécifier la counter variable dans l’instruction Next . Cette syntaxe améliore la lisibilité de votre programme, en particulier si vous avez des boucles imbriquées For . Vous devez spécifier la variable qui apparaît dans l’instruction correspondante For .
Les expressions start, end, et step peuvent évaluer n’importe quel type de donnée qui s’étend au type de counter. Si vous utilisez un type défini par l’utilisateur pour counter, vous devrez peut-être définir l’opérateur CType de conversion pour convertir les types de start, endou step vers le type de counter.
Exemple 1
L’exemple suivant supprime tous les éléments d’une liste générique. Au lieu d’un For Each... Instruction suivante, l’exemple montre une Forinstruction ...Next qui itère dans l’ordre décroissant. L’exemple utilise cette technique, car la removeAt méthode entraîne l’utilisation d’éléments après l’élément supprimé avec une valeur d’index inférieure.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
For index As Integer = lst.Count - 1 To 0 Step -1
lst.RemoveAt(index)
Next
Debug.WriteLine(lst.Count.ToString)
' Output: 0
Exemple 2
L’exemple suivant itère dans une énumération déclarée à l’aide d’une instruction Enum.
Public Enum Mammals
Buffalo
Gazelle
Mongoose
Rhinoceros
Whale
End Enum
Public Sub ListSomeMammals()
For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros
Debug.Write(mammal.ToString & " ")
Next
Debug.WriteLine("")
' Output: Gazelle Mongoose Rhinoceros
End Sub
Exemple 3
Dans l’exemple suivant, les paramètres de déclaration utilisent une classe qui a des surcharges pour les opérateurs +, -, >= et <=.
Private Class Distance
Public Property Number() As Double
Public Sub New(ByVal number As Double)
Me.Number = number
End Sub
' Define operator overloads to support For...Next statements.
Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number + op2.Number)
End Operator
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
Public Sub ListDistances()
Dim distFrom As New Distance(10)
Dim distTo As New Distance(25)
Dim distStep As New Distance(4)
For dist As Distance = distFrom To distTo Step distStep
Debug.Write(dist.Number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 10 14 18 22
End Sub