En programmation, la boucle while, francisée en boucle tant que, est une structure de contrôle permettant d'exécuter un ensemble d'instructions de façon répétée sur la base d'une condition booléenne. La boucle while peut être considérée comme une répétition de l'instruction if.

Boucle while

Fonctionnement modifier

Une boucle while est constituée d’un bloc de code source et d’une condition. À l’exécution, la condition est d’abord évaluée, et si elle est vraie, le bloc de code source est évalué. L'exécution du code est ensuite répétée jusqu’à ce que la condition soit fausse.

Par exemple, en langage C (tout comme en Java, C#, Objective-C et C++, qui utilisent tous la même syntaxe dans ce cas), le bloc de code source suivant

int x = 0;
while (x < 5) 
{
    printf ("x = %d\n", x);
    x++;
}
//affiche :
//x = 0
//x = 1
//x = 2
//x = 3
//x = 4

vérifie d’abord que x est strictement inférieur à 5. Comme c’est le cas, le corps de la boucle à répéter est exécuté, où la fonction printf est appelée et où x est incrémenté de 1. Après avoir exécuté toutes les instructions de l’intérieur de la boucle, la condition est de nouveau évaluée, et si elle est toujours vraie, le corps de la boucle est de nouveau exécuté. Ceci se répète jusqu’à ce que la condition devienne fausse, c'est-à-dire lorsque x devient égal à 5.

Il est à noter qu’il est possible, et dans certains cas voulu, que la condition soit toujours vraie, créant une boucle infinie. Quand une telle boucle est créée volontairement, il y a généralement une autre instruction (comme un break) qui contrôle la sortie de la boucle. Par exemple :

while (true) 
{
    // faire des choses compliquées
    if (condition) break;
    // faire d’autres choses
}

Ici, lorsque la condition évaluée dans le if devient vraie, l'instruction break est exécutée, forçant la sortie de la boucle quelle que soit la valeur du booléen évalué par la boucle (ici, true, qui est toujours vrai).

Variante modifier

Avec la syntaxe détaillée ci-avant, il est possible de ne pas du tout exécuter la boucle si la condition est fausse lors de sa première évaluation. Or, dans certaines situations, le programmeur veut s'assurer d'exécuter au moins une fois la boucle. Dans de nombreux langages de programmation, une syntaxe est définie pour réaliser ceci simplement. Par exemple, en C, il suffit de placer le mot-clé while assorti de sa condition à la fin de la boucle plutôt qu'au début. Le début de la boucle est alors indiqué par le mot-clé do :

do
{
    // Instructions
} while (condition);

Cette boucle est souvent nommée boucle do ... while, ou en français boucle faire ... tant que.

Structures équivalentes modifier

En langage C,

while (condition) 
{
    instructions;
}

est équivalent à

if (condition) 
{
    do 
    {
        instructions;
    } while (condition);
}

ou

while (true) 
{
    if (!condition) break;
    instructions;
}

ou

    goto TEST;
DEBUT_BOUCLE:
    instructions;
TEST:
    if (condition) goto DEBUT_BOUCLE;

ou

TEST:
    if (!condition) goto FIN_BOUCLE;
    instructions
    goto TEST;
FIN_BOUCLE:

Les deux derniers exemples ne sont pas reccomandés, à cause des instructions "goto" qui rendent l’exécution plus difficile à comprendre; ils ne sont normalement utilisés qu’en dernier recours.

Aussi, en langage C et dans les langages similaires, une boucle while est une boucle for sans instruction d’initialisation ni de comptage, par exemple :

for ( ; condition; )
{
    statements;
}

Exemples modifier

BASIC - QBasic et Visual Basic modifier

Dim compteur As Integer = 10

Do While compteur > 0
    compteur = compteur - 1
Loop

C et C++ modifier

int main ()
{
    int compteur = 5;
    long factorielle = 1;
 
    while (compteur > 1)
    {
        factorielle *= compteur--;
    }
    printf("%d", factorielle);
    return 0;
}

En C, on pourra inclure l’entête standard stdio.h, et en C++ cstdio.

Java, C# et D modifier

Le code source de la boucle est le même en Java, C# et en D :

int compteur = 5;
long factorielle = 1;

while (compteur > 1)
{
   factorielle *= compteur--;
}

En Java, le résultat peut être affiché avec :

System.out.println(factorielle);

L’équivalent en C# :

System.Console.WriteLine(factorielle);

Et en D :

writefln(factorielle);

Voir aussi modifier