Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Label sur vos break et continue.

Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par ekameleon (Marc Alcaraz)

En parcourant la référence AS3 je suis tombé sur une sympatique nouveauté du langage. Il est possible maintenant de donner un nom de label à nos instructions (boucles, etc..) qui vont utiliser ensuite des break ou des continue.

En fait cette méthode est très pratique lorsque l'on veut sortir proprement d'un gros bloc d'instructions imbriquées sans avoir à enchainer des tas de conditions pour renvoyer vers la sortie de ce bloc.

Je vais vous mettre un exemple simple tout d'abord d'utilisation du break sans les labels, il sera plus clair ensuite de vous montrer la finesse d'utilisation d'un “label” sur nos boucles :

var i:uint ;
var j:uint ;
var k:uint ;
for (i = 0 ; i<2 ; i++) // first
    {
        for (j = 0 ; j<2 ; j++) // second
           {
               for (k = 0 ; k<2 ; k++) // first
               {
                   trace( "  third : " +  i + " : " + j + " : " + k) ;
                   if (k == 1) break ;
               }
               trace( "  second : " +  i + " : " + j + " : " + k) ;
               if (k==1) break ; // ici je dois reprendre mon test pour sortir tout de suite de la boucle, c'est pas pratique.
           }
           trace( "  first : " +  i + " : " + j + " : " + k) ;
    }

Dans l'exemple au dessus en lançant le break dans la boucle “third”, je me retrouve dans la boucle du dessous “second”. Maintenant si je souhaite complètement sortir de cette instruction imbriquée je vais devoir à nouveau exécuter un break et je vais devoir créer une condition pour être certain de sortir de cette boucle au bon moment !

Maintenant voyons de plus prêt le même exemple avec les labels AS3.

var i:uint ;
var j:uint ;
var k:uint ;
 
first1: for (i = 0 ; i<2 ; i++) 
    {
    second1: for (j = 0 ; j<2 ; j++) 
        {
        third1: for (k = 0 ; k<2 ; k++) 
            {
            trace( "  third : " +  i + " : " + j + " : " + k) ;
            if (k == 1) break first1 ;
            }
         trace( "  second : " +  i + " : " + j + " : " + k) ;
         }
     trace( "  first : " +  i + " : " + j + " : " + k) ;
     }

Comme vous pouvez le voir au dessus, c'est très simple de labéliser une boucle avec un simple “NomDeMonLabel:” devant la déclaration de l'instruction. Ensuite il suffit dans le code à la suite d'un break (ou d'un continue) d'indiquer le label que l'on souhaite atteindre !

J'en profite pour vous mettre le même exemple utilisant un continue au lieu d'un break.

var i:uint ;
var j:uint ;
var k:uint ;
 
first2: for (i = 0 ; i<2 ; i++) 
            {
 
                trace( "  first : " + i + " : " + j + " : " + k) ;
                second2: for (j = 0 ; j<2 ; j++) 
                {
 
                    trace( "  second : " + i + " : " + j + " : " + k) ;
                    third2: for (k = 0 ; k<2 ; k++) 
                    {
                        trace( "  third : " + i + " : " + j + " : " + k) ;
                        if (k == 1) continue first2 ;
                    }
 
                }
 
            }

Attention, il est impossible dans un même code d'utiliser 2 fois le même nom de label, c'est logique d'ailleurs ! :happy:

Je vous conseille si vous découvrez comme moi cette nouvelle fonctionnalité de faire des essais dans Flex2 pour bien cerner tout ce qu'il est possible de faire avec … c'est vraiment un outil très très pratique.

Par EKAMELEON - ALCARAZ Marc (2006) Vous pouvez retrouver ce tutorial et des commentaires sur mon blog.