## Boucles jusqu'à`(do ... while)`

Certaines cases du monde sont jaunes, mais les buggles ne supportent pas de s'y trouver. Écrivez le code nécessaire pour avancer jusqu'à ce que le sol devienne blanc. Vous pourrez utiliser la méthode `estSurBlanc()` qui retourne vrai si le sol est blanc..

Le truc est que la plupart des buggles de ce monde se trouvent actuellement sur ce sol jaune qui les énerve tant. Cela explique sans doute leur état de panique, et le fait que toutes les buggles se ruent vers l'avant au début, même la buggle qui ne se trouve pas sur du jaune. En d'autres mots, même si le sol est blanc le premier coup, il faut quand même avancer d'un pas.

L'idée générale est donc de faire:

    avancer jusqu'à se trouver sur une case blanche

La principale difficulté est que nous voulons exécuter le corps de boucle au moins une fois, même si la buggle se trouve déjà sur une case blanche. Il serait facile de dupliquer le corps de la boucle avant la boucle pour cela, mais ça serait une très mauvaise idée. Dupliquer du code est une très mauvaise habitude et il faut toujours éviter de le faire.

Quand on duplique le code, sa maintenance tourne facilement au cauchemar : la lecture du code est très pénible puisque le lecteur doit s'assurer qu'il n'y a effectivement aucune différence, même minime, entre les versions du même code. Debugger le code devient plus long, puisqu'il faut corriger toutes les versions. En fait, toutes les modifications deviennent pénibles. Alors, vraiment, vous devrez toujours vous efforcer d'éviter la duplication du code quand c'est possible. Et la bonne nouvelle est que c'est toujours possible...

### Exécuter le corps de boucle au moins une fois

[!python]

Certain langage ont une construction spécifique pour cela, mais pas Python. Qu'à cela ne tienne, on s'en sort très bien sans. Une bonne manière est d'avoir une variable dédiée indiquant si c'est la première fois que l'on rentre dans la boucle :

    premiereFois = True
    while premiereFois or (les autres conditions):
      premiereFois = False
      (le corps de la boucle)

Quand `premiereFois` est vraie, le corps de la boucle est exécuté même si les autres conditions impliqueraient le contraire. Une fois que le corps de boucle a été exécuté, `premiereFois` est mis à faux et n'influe plus jamais la décision d'entrer dans le corps de boucle.

[/!] [!java|scala|c]

Dans une boucle `while`, la condition est évaluée avant toute chose, et si elle est fausse, le corps de la boucle n'est jamais exécuté. Il arrive parfois que l'on veuille que le corps de la boucle soit évalué au moins une fois, même si la condition est initialement fausse. On utilise pour cela une variante de la boucle `while`, dont la syntaxe est la suivante en [!thelang].[!java|c]Ne pas oublier le point virgule (;) après la condition, c'est obligatoire.[/!]

    do {
        action()[!java];[/!]
    } while (condition)[!java];[/!]

[/!]