[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> ActionScript / Flash / Flex
> Introduction à l'ActionScript > Les bases de l'actionscript > Les Boucles
> Lecture du tutoriel
Les Boucles
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous avons vu les conditions et leur importance, nous nous intéressons maintenant à l'autre point commun à tous les langages de programmation, j'ai nommé : les boucles !
Comme vous le savez, Flash lit le code dans l'ordre : de haut en bas.
Une fois arrivé tout en bas : il s'arrête.
Eh bien avec une boucle, vous allez pouvoir demander à ce qu'une partie du code, un bloc d'instructions, soit répété un certain nombre de fois.
Et pour illustrer mes propos, je vais me permettre de ressortir
sans autorisation,
alors ne le répétez pas, une image d'un autre tuto du site que vous reconnaîtrez.
Le système de boucle de Flash est
exactement le même que celui du C ou du Php, ceux qui savent déjà comment utiliser les boucles peuvent donc sauter ce chapitre.
Cela dit, les nouveaux en Flash font souvent une erreur importante. Ils pensent que en faisant une boucle qui déplace un clip sur la scène, l'utilisateur verra ce clip se déplacer. C'est faux ! Tant que Flash n'a pas fini d'exécuter tout le code qu'il voit, il n'affichera rien !
La boucle ne s'exécute pas DANS le temps mais INSTANTANEMENT. Mais attention, si on demande à Flash de répéter une boucle plusieurs centaines de fois, ça peut durer longtemps, mais cela ne fera que figer l'animation, l'utilisateur ne verra rien.
Nous allons déjà regarder la boucle simple existante : la boucle
while.
Tout comme
if qu'on a vu précédemment,
while va exécuter du code si une condition booléenne est remplie (retournez vite dans le chapitre précédent si vous avez pas compris les derniers mots

).
En français, voilà ce que donnerait une boucle
while :
Code : Autre1
2
3
| TANT QUE {CONDITION est VRAIE}
ALORS ... |
Et en Flash :
Code : Autre1
2
3
| while (condition) {
// actions à effectuer
} |
Ainsi, tant que la condition est remplie, Flash réexécutera le code à l'intérieur de la boucle.
Et si la condition ne change pas et reste toujours égale à true ?
Là c'est le bordel.

C'est ce qu'on nomme une
boucle infinie. L'animation Flash restera figée un bon moment, mais au bout de quelques dizaines de (longues) secondes, Flash vous demandera si vous souhaitez continuer l'exécution du code, où si vous préférez arrêter tout. C'est un mécanisme de protection pour les utilisateurs.
Amusons-nous un peu.
Code : Autre1
2
3
4
5
6
| var monnombre:Number = 10;
while(monnombre > 0) { // Tant que monnombre est strictement plus grand que 0
trace(monnombre); // On affiche la valeur de la variable
monnombre--; // On décremente la variable (on soustrait 1 )
} |
Vous pouvez observer dans la fenêtre de sortie que l'effet est immédiat. Vous pouvez voir tous les chiffres de 10 à 1.
Maintenant, pour le plaisir,
un exemple de ce qu'il ne faut pas faire :
Code : Autre1
2
3
| while(true) {
trace("boucle infinie");
} |
Pour tester, vous pouvez exécuter ce code, vous pourrez ainsi voir la fenêtre de Flash demandant s'il est raisonnable de continuer d'exécuter le script.
C'est tout ce qu'il y a à savoir sur les boucles
while.
Voilà une boucle plus évoluée que
while, il s'agit de
for.
En fait,
for est une boucle
while condensée, tout comme les
ternaires étaient des
if condensés.
En français :
Code : Autre1
2
3
4
5
| Déclaration de ma variable
Condition sur la variable pour que la boucle se fasse
Modification de ma variable pour que la boucle ne se fasse pas à l'infini |
Tout à l'heure on a écrit :
Code : Autre1
2
3
4
5
6
| var monnombre:Number = 10;
while(monnombre > 0) { // Tant que monnombre est strictement plus grand que 0
trace(monnombre); // On affiche la valeur de la variable
monnombre--; // On décrémente la variable (on soustrait 1)
} |
Et maintenant la même chose avec
for :
Code : Autre1
2
3
| for (var monnombre:Number = 10; monnombre>0; monnombre--) {
trace(monnombre);
} |
Vous retrouvez tous les éléments, mais dans le désordre.
On initialise la variable, on écrit la condition nécessaire à l'exécution de la boucle, et dans cet exemple on décrémente la variable. On sépare tout ça par des points virgules
;
Pour les matheux, vous verrez une analogie avec ce qu'on appelle les
démonstrations par récurrence.
Maintenant, voyons comment faire si on voulait que la fenêtre de sortie ne nous affiche pas 10 jusqu'à 1 mais 1 jusqu'à 10.
Secret (cliquez pour afficher)Code : Autre1
2
3
| for (var monnombre:Number = 1; monnombre<=10; monnombre++) {
trace(monnombre);
} |
Comme vous avez remarqué, dans ce cas on déclare la variable égale à
1, pas
zéro. Sinon, la première valeur affichée serait
0, car l'incrémentation ne s'effectuera qu'après la première lecture du bloc contenu dans la boucle.

Il ne faut pas oublier de préciser la condition inverse, c'est-à-dire
tant que monnombre strictement plus petit que 10 et changer la décrémentation en incrémentation.
Je trouvais ça triste d'écrire un chapitre sur les boucles sans s'amuser un peu avec. Et pour cela je vous ai préparé un petit exercice sympathique et qui se révélera utile :
Vous souhaitez que la fenêtre de sortie vous affiche une fois
"No problemo", une fois
"Aïe caramba" et cela de façon alternée une vingtaine de fois :
Code : Autre1
2
3
4
5
6
7
8
9
| No Problemo
Aïe Caramba
No Problemo
Aïe Caramba
... |
Comment faire ?
Avant de regarder les solutions, cherchez un peu.
Il existe des dizaines de façons de répondre à cet exercice.
Moi j'ai décidé d'utiliser une boucle for dans les deux solutions que je vous propose.
La première solution
C'est la plus logique et la plus facile à comprendre.
Code : Autre1
2
3
4
5
| var machaine:String = "No Problemo";
for (var monnombre:Number = 20; monnombre>0; monnombre--) {
machaine = (machaine=="No Problemo") ? "Aïe Caramba" : "No Problemo";
trace(machaine);
} |
On déclare la variable
machaine et on lui affecte la valeur
"No Problemo".
Ensuite dans une boucle
for qui va s'exécuter 20 fois, je place une condition avec structure ternaire histoire de gagner de la place

(et de vous faire réviser la précédente leçon

).
Code : Autre1
2
3
| Si machaine vaut "No Problemo", alors on lui affecte la valeur "Aïe Caramba"
Si machaine ne vaut pas "No Problemo", alors on lui affecte la valeur "No Problemo" |
Et puisqu'il n'y a que deux possibilités de valeur, ça fonctionne très bien.
La seconde solution
Plus "mathématique", mais aussi plus courte, voici la seconde solution :
Code : Autre1
2
3
4
5
| var machaine:String;
for (var monnombre:Number = 20; monnombre>0; monnombre--) {
machaine = (monnombre%2 == 1) ? "No Problemo" : "Aïe Caramba";
trace(machaine);
} |
On utilise ici les modulos.
On déclare une chaîne de caractères vide :
machaine
Et dans une boucle répétée 20 fois, on va utiliser les modulos.
Rappel : le modulo est un opérateur qui retourne le reste de la division euclidienne de deux nombres. Il est représenté par le signe %
Par exemple : 10%4 = 2 car quand vous divisez 10 par 4 il reste 2 !
Il faut savoir que la division euclidienne de n'importe quel nombre entier (sans virgule si vous préférez) par 2 ne donnera que deux restes possibles :
0 ou
1.
Code : Autre1
2
3
| SI reste de la division de monnombre par 2 VAUT 1 ALORS machaine DEVIENT "No Problemo"
SI reste de la division de monnombre par 2 NE VAUT PAS 1 ALORS machaine DEVIENT "Aïe Caramba" |
J'ai décidé pour que le code soit plus clair de passer encore une fois par la variable
machaine.
Cela dit, elle n'est pas obligatoire avec la solution des modulos. On aurait pu mettre directement la condition dans la fonction trace et on aurait gagné 3 lignes.
Code : Autre1
2
3
| for (var monnombre:Number = 20; monnombre>0; monnombre--) {
trace((monnombre%2 == 1) ? "No Problemo" : "Aïe Caramba");
} |
J'espère que vous avez trouvé ce petit exercice sympathique. Sachez que pouvoir de façon simple échanger deux valeurs dans une variable se révèle souvent très utile, par exemple pour colorier de couleurs différentes une ligne sur deux d'un tableau.
Ce chapitre fut court mais très enrichissant. Ne l'oubliez donc pas, les boucles reviendront souvent dans notre code.