Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 For
structure ...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 For
boucle ...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
...Finally
instruction intercepte une exception. Vous pouvez utiliserExit For
à la fin duFinally
bloc.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 For
pour échapper à la boucle. Pour plus d’informations, consultez Instruction Do...Loop.
Implémentation technique
Lorsqu’une For
boucle ...Next
démarre, Visual Basic évalue start
, end
et 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
,Single
ouDouble
.Énumération que vous déclarez à l’aide d’une instruction Enum.
Élément
Object
.T
Type qui a les opérateurs suivants, oùB
est un type qui peut être utilisé dans uneBoolean
expression.Public Shared Operator >= (op1 As T, op2 As T) As B
Public Shared Operator <= (op1 As T, op2 As T) As B
Public Shared Operator - (op1 As T, op2 As T) As T
Public 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
, end
ou 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 For
instruction ...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