3) Les boucles : for et while

On trouve le principe de la boucle dans tous les langages informatiques. Il s’agit de répéter des instructions un certain nombre de fois. Pour cela, deux fonctions très utiles. Démonstration.

Précédent | 4/16 | Suivant

La boucle "for"

La boucle for permet de répéter des instructions un nombre défini de fois.
Cela permet de gagner du temps en programmation et de faire un code plus compact, plus "malin".

Si je veux faire par exemple une série de ligne qui partent du bas de la fenêtre et qui montent jusqu’à une hauteur aléatoire, je peux faire ceci :

void setup(){
 size(110,600);
 stroke(255);
}

void draw(){
 background(0);
 line(10,0,10,random(height));
 line(20,0,20,random(height));
 line(30,0,30,random(height));
 line(40,0,40,random(height));
 line(50,0,50,random(height));
 line(60,0,60,random(height));
 line(70,0,70,random(height));
 line(80,0,80,random(height));
 line(90,0,90,random(height));
 line(100,0,100,random(height));
}

Pas mal, mais si je veux faire une animation plus large, ou mettre plus de ligne verticales, je devrais ajouter encore et encore des lignes dans mon code.
L’emploi de la boucle "for" va faciliter cette tâche :

void setup(){
 size(220,600);
 stroke(255);
}

void draw(){
 background(0);
 for(int i=1;i<width;i++){
 line(i,0,i,random(height));
 }
}

Je fais 10 fois plus de lignes avec moins de code. En fait avec for, on utilise une variable (ici "i", mais vous pouvez lui donner le nom que vous voulez) pour parcourir une série de valeurs numériques. Tant que la condition définie dans la boucle et vraie, le code contenu entre les accolades s’exécute. Une fois que la condition définie pour la boucle est faux, processing passe à la suite.
On définit 3 choses :
- La variable à utiliser, que l’on initialise au besoin. Ici on définit une variable "i", qui est un chiffre entier égal à 1.
- la condition de la répétition. Ici i doit être inférieur à la largeur de la fenêtre pour le code entre accolade s’exécute.
- le mode de parcours de la variable. Ici i++, qui signifie qu’à chaque fois que processing exécute un tour de boucle, il ajoute 1 à la valeur de i. On aura donc, 1, 2, 3, 4, etc. jusqu’à 220, ou processing, voyant que 200 n’est pas inférieur à 200, n’exécutera plus le contenu des accolades et passera au code après cette boucle.

Remarquez que l’on utilise i pour positionner la ligne sur l’axe horizontal. Utiliser la variable dans le code entre accolade n’est évidemment pas une obligation.

Autre exemple, si je veux dessiner une grille dans la fenêtre de processing, je peux faire comme ceci :

void setup(){
 size(600,600);
 stroke(255);
 background(0);
}

void draw(){
 //lignes horizontales
 line(10, 10, 590, 10);
 line(10, 200,590,200);
 line(10,400, 590,400);
 line(10,590,590,590);
 
 // lignes verticales
 line(10,10,10,590);
 line(200,10,200,590);
 line(400,10,400,590);
 line(590,10,590,590);
}

Ooouf. 8 lignes sont nécessaire pour dessiner cette grille. Si maintenant je décide de faire une grille d’échiquier, il me faudra 20 lignes. Ça devient franchement laborieux.
l’emploi d’une boucle va faciliter cela :

void setup(){
 size(600,600);
 stroke(255);
 background(0);
}

void draw(){
 int espacey=(height-20)/10;
 int espacex=(width-20)/10;
 
 //lignes horizontales
 for(int i=0;i<=11;i++){
   line(10,10+i*espacey,width-10,10+i*espacey);
 }
 
 // lignes verticales
 for(int i=0;i<=11;i++){
   line(10+i*espacex,10,10+i*espacex,height-10);
 }
}

La boucle While

La boucle while est très proche de for, sauf qu’elle ne comporte pas de compteur, ce qui demande un peu plus de prudence de la part du codeur.

void setup(){
 size(220,600);
 stroke(255);
}

void draw(){
 background(0);

 int i=0;
 while(i<width) {
   line(i,0,i,random(height));
   i = i + 5;
 }
}

Dans cet exemple, nous définissons d’abord i comme étant un chiffre entier valant 0.
Dans la boucle "while", nous ne mettons qu’une seule chose : la condition nécessaire à l’exécution du contenu de la boucle. Ici, que i soit inférieur à la largeur de la fenêtre. Le résultat du test doit être vrai pour que le contenu de la boucle s’exécute.

Attention donc ! Pour sortir de la boucle while, quelque chose devra se passer durant son exécution qui va rendre le résultat du test faux, sans quoi la boucle va s’exécuter indéfiniment et votre programme sera bloqué... Généralement ce quelque chose se fait dans la boucle. Dans notre exemple, la valeur de i augmente de 5 en 5, et donc i dépassera la largeur de la fenêtre à un moment donnée, permettant ainsi de sortir de la boucle...