La boucle While
La boucle While est utile pour répéter l'exécution d'un bloc de code un nombre variable de fois. Pour déterminer si le bloc de code doit être exécuté, une condition booléenne est utilisée, tout comme pour un If. La structure de la boucle While est la suivante :
- While [ConditionBooléenne]
- ...
- EndWhile
Dans la boucle While susmentionnée, le bloc de code est exécuté si la condition booléenne est True. Une fois que le bloc de code a été exécuté, la boucle While réévalue la condition et, si elle est toujours True, réexécute le bloc. Cette répétition continue jusqu'à ce que la condition devienne False. Lorsque la condition est False, le flux d'exécution se poursuit avec l'instruction immédiatement suivante l'instruction EndWhile correspondante.
Par exemple :
- a = 0
- While a <= 10
- a = a + 1
- EndWhile
Dans cet exemple, la boucle est exécutée tant que la variable "a" ne dépasse pas la valeur 10. En effet, la condition initiale renvoie True si "a" est inférieur ou égal à 10.
Il incombe au programmeur de garantir que la condition booléenne devienne False à un moment donné. Si cela ne se produit pas, le corps de la boucle aura tendance à être exécuté un nombre infini de fois. Pour prévenir ce danger, une limite d'environ 250 000 itérations a été imposée, après quoi la boucle While déclenche une erreur. Les boucles infinies étant l'une des erreurs de programmation les plus courantes, il est toujours recommandé de faire très attention lors de la construction d'une boucle While.
Par exemple :
- a = 0
- While a <= 10
- a = a - 1
- EndWhile
Dans cet exemple, la condition sera toujours True, car la variable "a", étant décrémentée, ne dépassera jamais la valeur 10. Par conséquent, la boucle aura tendance à être exécutée un nombre infini de fois. Après environ 250 000 itérations, l'exécution se terminera par une erreur.
Nous avons vu la boucle While classique, où la condition booléenne est exprimée et exécutée au début. La condition booléenne initiale permet d'éviter d'exécuter le bloc de code si cela n'est pas nécessaire. Pour exécuter le bloc de code au moins une fois, il existe une structure While dans laquelle la condition booléenne est placée à la fin.
- While
- ...
- EndWhile [ConditionBooléenne]
Contrairement à la condition placée au début, si la condition booléenne à la fin est True, la boucle se termine. Le mot-clé EndWhile est toujours utilisé pour délimiter la fin d'une boucle While. Ainsi, la fin du While (End of While) se produira si la condition est True.
Par exemple :
- a = 0
- While
- a = a + 1
- EndWhile a > 10
Dans ce cas, le bloc de la boucle While est exécuté au moins une fois. L'itération de la boucle se termine lorsque la variable "a" est supérieure à 10.
La condition booléenne peut être placée au début de la boucle While, le bloc de code est alors exécuté si la condition est True. Ou bien, la condition peut être placée à la fin de la boucle, et dans ce cas, la boucle se termine si la condition est True. Une caractéristique particulière est que la condition peut être placée simultanément au début et à la fin, obtenant ainsi deux contrôles conditionnels au début et à la fin de la boucle. Cette situation spéciale a un véritable sens 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 précédent illustre l'utilisation 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", une valeur aléatoire comprise entre 0 et 9 est attribuée à chaque itération.
Le corps d'une boucle While peut contenir une autre boucle : on parle alors de boucles imbriquées.
Par exemple :
- a = 0
- While a <= 10
- b = Random(10)
- While b < 5
- // Faire quelque chose
- EndWhile
- a = a + 1
- EndWhile
La boucle secondaire est exécutée uniquement si la variable "b" est inférieure à 5. Dans la variable "b", une valeur aléatoire comprise entre 0 et 9 est attribuée à chaque itération de la boucle primaire.
L'itération d'une boucle While peut être interrompue à l'aide de l'instruction Break. Lorsque l'instruction Break est rencontrée, l'exécution passe à l'instruction qui suit immédiatement le corps de la boucle.
Par exemple :
- a = 0
- While a <= 10
- b = Random(10)
- If b = 5
- Break
- EndIf
- a = a + 1
- EndWhile
Dans l'exemple précédent, si la variable "b" est égale à 5, la boucle se terminera, sinon elle continuera avec toutes les itérations. L'instruction Break ne devrait généralement pas être utilisée, car il existe des outils plus appropriés pour écrire une boucle. Cependant, en cas de nécessité, son utilisation peut être tolérée.
L'instruction Continue a un effet similaire à Break sur l'exécution de la boucle. Elle est interrompue mais, contrairement à Break, l'exécution retourne au début ou à la fin (selon l'emplacement de la condition booléenne) et, si nécessaire, le corps de la boucle 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 précédent, si la variable "b" est égale à 5, la boucle est réexécutée, par conséquent la variable "a" n'est pas incrémentée. En revanche, 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 de la boucle.
- a = 0
- While
- b = Random(10)
- If b = 5
- Continue
- EndIf
- a = a + 1
- EndWhile a > 10
Si la boucle While a une double condition de contrôle, l'instruction Continue fera sauter l'exécution toujours à la condition de début. Tout comme l'instruction Break, Continue peut être remplacée par des instructions plus performantes qui rendent le code plus lisible.