Le cycle While
Le cycle While est utile pour répéter l'exécution d'un bloc de code pour un numéro variable de fois. Pour déterminer s'il faut exécuter le bloc de code on utilise une condition booléenne, exactement comme le fait un If. La syntaxe du cycle While est la suivante:
- While [ConditionBooléenne]
- ...
- EndWhile
Dans le cycle While ci-dessus, le bloc de code est exécuté si la condition booléenne est True. Après avoir exécuté le bloc de code, le cycle While réexamine la condition et, si elle est encore True, réexécute le bloc, et cette répétition va continuer jusqu'à ce que la condition devient False. Quand la condition est False, le flux de l'exécution se poursuit avec l'instruction immédiatement après la relative instruction EndWhile.
Par exemple:
- a = 0
- While a <= 10
- a = a + 1
- EndWhile
Dans l'exemple le cycle est exécuté jusqu'à ce que la variable "a" dépasse la valeur 10. La condition de départ en effet retourne True si "a" est inférieur ou égal à 10.
C'est la responsabilité du programmeur de garantir que la condition booléenne tôt ou tard devienne False. Si cela ne se vérifie pas, le corps du cycle va essayer de s'exécuter un nombre infini de fois. Pour prévenir ce danger, il a été prévu une limite d'environ 250.000 itérations, après quoi le cycle While produit une erreur. Vu que les cycles sans fin c'est l'une des erreurs plus habituelle de programmation, on conseille d'être toujours très attentif quand on construit un cycle While.
Par exemple:
- a = 0
- While a <= 10
- a = a - 1
- EndWhile
Dans l'exemple la condition sera toujours True, car la variable "a" étant diminuée ne dépassera jamais la valeur 10. Le cycle va donc être exécuté un nombre infini de fois. Après environ 250.000 itérations l'exécution se terminera avec une erreur.
Nous avons vu le cycle While classique, dans lequel la condition booléenne est exprimée et exécutée au début. La condition booléenne de départ permet d'éviter l'exécution du bloc de code s'il n'est pas nécessaire. Pour exécuter au moins une fois le bloc de code, il est disponible une syntaxe While où la condition booléenne est placée à la fin.
- While
- ...
- EndWhile [ConditionBooléenne]
Différemment de la condition placée au début, si la condition booléenne à la fin est True, le cycle se termine. Le mot clé EndWhile est toujours utilisée pour délimiter la fin d'un cycle While. La fin de While (End of While) va donc se vérifier si la condition sera True.
Par exemple:
- a = 0
- While
- a = a + 1
- EndWhile a > 10
Dans ce cas le bloc du cycle While est exécuté au moins une fois. L'itération du cycle se termine quand la variable "a" est supérieur à 10.
La condition booléenne peut être placée au début du cycle While, de conséquence le bloc de code est exécuté si la condition est True. D'autre part la condition peut être placée à la fin du cycle, et dans ce cas le cycle se termine si la condition est True. Une caractéristique particulière est celle où la condition peut être placée en même temps au début et à la fin, en réalisant deux contrôles conditionnels au début et à la fin du cycle. Cette situation particulière est sensée si les deux conditions contrôlent des variables différentes.
Par exemple:
- a = 0
- b = 0
- While a <= 10
- a = a + 1
- b = Random(10)
- EndWhile b >= 5
L'exemple ci-dessus montre l'usage de la double condition. Le bloc While est exécuté si la variable "a" est inférieure ou égale à 10, ou se termine si la variable "b" est supérieure ou égale à 5. Dans la variable "b" à chaque itération on attribue une valeur aléatoire qui peut aller de 0 à 9.
Le corps d'un cycle While peut contenir un autre cycle: dans ce cas on parle de cycles nichés.
Par exemple:
- a = 0
- While a <= 10
- b = Random(10)
- While b < 5
- // Faire quelque chose
- EndWhile
- a = a + 1
- EndWhile
Le cycle secondaire est exécuté uniquement si la variable "b" est inférieure à 5. Dans la variable "b" à chaque itération du cycle primaire est attribué une valeur aléatoire de 0 à 9.
L'itération d'un cycle While peut être interrompue avec l'instruction Break. Quand on rencontre l'instruction Break l'exécution passe à exécuter l'instruction immédiatement après le corps du cycle.
Par exemple:
- a = 0
- While a <= 10
- b = Random(10)
- If b = 5
- Break
- EndIf
- a = a + 1
- EndWhile
Dans l'exemple ci-dessus si la variable "b" est égale à 5 le cycle se terminera, autrement va continuer avec toutes les itérations. L'instruction Break habituellement ne devrait pas être utilisée, ayant des outils plus adéquats pour écrire un cycle. Toutefois, au cas de nécessité, on peut en tolérer l'usage.
L'instruction Continue a un effet semblable au Break dans l'exécution du cycle. Il est interrompu mais, différemment du Break, l'exécution retourne au début ou à la fin (selon d'où se trouve la condition booléenne) et si nécessaire le corps du cycle est réexécuté.
Par exemple:
- a = 0
- While a <= 10
- b = Random(10)
- If b = 5
- Continue
- EndIf
- a = a + 1
- EndWhile
Dans l'exemple ci-dessus si la variable "b" est égale à 5 le cycle est réexécuté, donc la variable "a" n'est plus augmentée. Tandis que, dans l'exemple suivant, la condition de contrôle est placée à la fin, donc l'instruction Continue fait sauter l'exécution à la fin du cycle.
- a = 0
- While
- b = Random(10)
- If b = 5
- Continue
- EndIf
- a = a + 1
- EndWhile a > 10
Si le cycle While a une double condition de contrôle, l'instruction Continue va ramener l'exécution toujours à la condition de départ. Ainsi comme l'instruction Break, Continue peut être remplacée par des instructions plus performantes qui donnent au code plus de clareté.