Les boucles
Ou comment fabriquer des allumettes...


Comme cela a été dit dans la page "Les structures de contrôle" les boucles vont consister à exécuter plusieurs fois un même bloc d'instructions.

Il y a souvent plusieurs manières de coder ces boucles, chaque programmeur a ses habitudes, mais parfois, une façon de faire est préférable à une autre. Pour vous en donner une idée, prenons un exemple dans la vraie vie : vous êtes bûcheron, et il va falloir s'attaquer au tas que vous pouvez admirer sur l'image.

Votre mission : fendre des bûches !
Premier cas très simple, vous allez fendre tout ce tas sans trop vous poser de question. Cela va donner :

   Tant que vous n'êtes pas fatigué,

   prendre une bûche,
   la fendre en deux,
   la ranger derrière vous.
   Recommencer.

   Passer voir Jacquot le comptable.
   Rentrer chez vous


Il s'agit d'une boucle à précondition : la condition est vérifiée avant que la première boucle ne s'exécute. Le code utilisé généralement dans ce cas est de cette forme :

Un mini dico pour les non-anglophones



   While (condition)
   {
      Instruction 1;
      Instruction 2;
      Instruction 3;
   }
   Instruction 4;
   Instruction 5;
   ...


Y'a pas à dire, ça avance...
Dans ce cas, si vous êtes fatigué dès le départ, vous ne fendrez aucune bûche. Il peut arriver que le programmeur veuille que la boucle s'exécute au moins une fois, dans ce cas, une boucle à postcondition s'impose :

   do
   {
      Instruction 1;
      Instruction 2;
      Instruction 3;
   } while (condition);
   Instruction 4;
   Instruction 5;
   ...


En bon français, cela signifie FAIRE... TANT QUE... Ce qui suppose que la condition est vraie au départ. On peut aussi préférer FAIRE... JUSQU'A CE QUE et , dans ce cas, on écrira :

Un petit break, sandwich jambon beurre ?
   repeat
   {
      Instruction 1;
      Instruction 2;
      Instruction 3;
   } until (condition);
   Instruction 4;
   Instruction 5;
   ...


Vous n'êtes pas un robot, il se pourrait bien qu'avant de finir de fendre la totalité du tas de bois, vous ayez besoin de vous sustenter, de faire un break en quelque sorte. Pas de problème, il suffit d'introduire une condition d'arrêt (ici, condition2 = Vous avez faim ? Si oui, le programme passera à l'instruction 4 comme si la condition 1 était remplie.) :

   repeat
   {
      Instruction 1;
      Instruction 2;
      if (condition2) break;
      Instruction 3;
   } until (condition1);
   Instruction 4;
   Instruction 5;
   ...


Il arrivera fréquemment que la boucle doive traiter une collection d'objets dont on connaît le nombre. Par exemple, vous pouvez vouloir fendre 50 bûches, pas plus, pas moins. Il faudra alors utiliser un compteur pour savoir à quel moment on doit sortir de la boucle :

Merci Bob, mais ce compteur n'est pas très adapté...
   0 => i;
   repeat
   {
      Instruction 1;
      Instruction 2;
      i += 1;
      Instruction 3;
   } until (i == 50);
   Instruction 4;
   Instruction 5;
   ...


Ou de manière plus condensée dans beaucoup de langages :

   for (i = 0; i < 50; i++)
   {
      Instruction 1;
      Instruction 2;
      Instruction 3;
   }
   Instruction 4;
   Instruction 5;
   ...


Ici, la première ligne signifie "pour (valeur de départ du compteur, valeur limite à tester, incrémentation du compteur) ..." :

Votre mission a évolué : maintenant, il vous faut fabriquer des allumettes !
Enfin, il est tout à fait possible d'imbriquer des boucles. Par exemple si, une fois une bûche fendue, vous devez la tailler en 500 bâtonnets pour faire des allumettes, cela pourra donner ceci :

   for (i = 0; i < 50; i++)
   {
      Instruction 1;
      Instruction 2;
      for (j = 0; j < 500; j++)
      {
         Instruction 3;
         Instruction 4;
      }
      Instruction 5;
   }
   Instruction 6;
   Instruction 7;
   ...


***


Gottfried_Wilhelm_von_Leibniz Le comptable est content de vous...
Introduites à partir du FORTRAN II en 1958 de manière rudimentaire, les boucles ont beaucoup évolué comme vous pouvez le constater.

Comme toujours, chaque langage aura sa spécificité, mais, à partir du moment où les concepts évoqués ici sont bien compris, cela ne doit pas poser beaucoup de problèmes.

Attention néanmoins au bug classique qui consiste à créer une boucle sans fin, par exemple :

   0 => i;
   repeat
   {
      echo "Jacquot est content";
   } until (i == 2);
   Instruction;
   Instruction;
   ...


Là, il va falloir trouver le bouton pour éteindre sauvagement Jacquot le perroquet-comptable, car la variable i va rester éternellement égale à 0...

Page précédente - Sommaire - En savoir plus