API Basic Continue fr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Continue For / Do / While
ClassicUO • Basic
Continue ignore le reste du corps de la boucle englobante la plus proche du type demandé. Continue For vise For et For Each ; Continue Do vise Do/Loop et Repeat/Until ; Continue While vise While/Wend.
Syntaxe exacte
Continue For
Continue Do
Continue While
Paramètres
kind— kind : For, Do ou While obligatoire après Continue, sans parenthèses. La boucle doit entourer l’instruction dans la même procédure. Une boucle imbriquée d’un autre type n’intercepte pas le transfert.
Retour
Continue ne renvoie rien et ne s’utilise pas dans une expression. Ce n’est ni TRUE/FALSE ni un redémarrage de procédure. La fonction peut ensuite produire RETURN ; les exemples renvoient Integer 10, 3 et 34.
Comportement
- For exécute NEXT, applique STEP et teste la valeur suivante contre la limite ; For Each prend l’élément suivant. À épuisement, la boucle se termine. L’initialisation du compteur et l’expression de collection ne sont pas répétées.
- Do reteste sa condition au début ou, si elle est sur Loop, à la fin. Repeat/Until utilise UNTIL. Do/Loop sans condition continue jusqu’à sortie ou arrêt. While reteste WHILE ; Continue Do ne sélectionne jamais While/Wend.
- La préparation résout l’adresse de la boucle demandée. En son absence, SC020 survient avant les initialiseurs, même sans Option Explicit. Noms NEXT et terminaisons sont vérifiés. L’ancienne forme FOR/NEXT traversant IF reste compatible.
- Un transfert quittant TRY/CATCH exécute chaque FINALLY traversé, de l’intérieur vers l’extérieur, une fois. Une boucle entièrement dans TRY n’exécute pas ce FINALLY à chaque tour. RETURN ou une erreur dans FINALLY remplace le transfert en attente.
- Continue n’attend pas. Faites évoluer la condition ou utilisez une attente adaptée lors d’un sondage, sinon la boucle peut être infinie. Pause et arrêt restent vérifiés. Les énumérateurs natifs quittés sont libérés et les exécutions sont indépendantes. Exit For/Do/While quitte la boucle.
Exemples
1. Ignorer des éléments
# values contient -2, 4, 0, 6. item<=0 provoque Continue For pour -2 et 0, sans exécuter total+=item. Cette forme fonctionne dans For Each. SumPositive et Main renvoient Integer 10, soit 4+6.
Option Explicit On
Function SumPositive(values)
Var total = 0
For Each item In values
If item <= 0 Then
Continue For
End If
total += item
Next
Return total
End Function
Sub Main()
Dim values[3]
values[0] = -2
values[1] = 4
values[2] = 0
values[3] = 6
Return SumPositive(values)
End Sub
Explication des paramètres et du déroulement:
values contient -2, 4, 0, 6. item<=0 provoque Continue For pour -2 et 0, sans exécuter total+=item. Cette forme fonctionne dans For Each. SumPositive et Main renvoient Integer 10, soit 4+6.
2. Choisir la boucle extérieure par type
# AdvanceTo reçoit limit=3 ; count commence à 0. Dans While True, count augmente puis Continue Do vise le Do extérieur. Sa condition est retestée à chaque transfert ; count=3 termine la boucle et renvoie Integer 3.
Option Explicit On
Function AdvanceTo(limit)
Var count = 0
Do While count < limit
While True
count += 1
Continue Do
Wend
Loop
Return count
End Function
Sub Main()
Return AdvanceTo(3)
End Sub
Explication des paramètres et du déroulement:
AdvanceTo reçoit limit=3 ; count commence à 0. Dans While True, count augmente puis Continue Do vise le Do extérieur. Sa condition est retestée à chaque transfert ; count=3 termine la boucle et renvoie Integer 3.
3. Nettoyage d’un tour ignoré
# Process reçoit limit=3 et skip=2. i prend 1, 2, 3. Le second tour ignore total+=i, mais Finally augmente cleanup trois fois. total=4 et cleanup=3 ; RETURN cleanup*10+total renvoie Integer 34.
Option Explicit On
Function Process(limit, skip)
Var total = 0
Var cleanup = 0
For Var i = 1 To limit
Try
If i = skip Then
Continue For
End If
total += i
Finally
cleanup += 1
End Try
Next i
Return cleanup * 10 + total
End Function
Sub Main()
Return Process(3, 2)
End Sub
Explication des paramètres et du déroulement:
Process reçoit limit=3 et skip=2. i prend 1, 2, 3. Le second tour ignore total+=i, mais Finally augmente cleanup trois fois. total=4 et cleanup=3 ; RETURN cleanup*10+total renvoie Integer 34.