Re: "interruption" a l'interieur d'une boucle ?

Thomas De Contes <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 24 janv. 08 à 10:22, [email protected] a écrit :

> On Thu, Jan 24, 2008 at 09:00:38AM +0100, Arnaud Charlet wrote:
>>> Par contre, je ne me souviens plus si c'est possible  
>>> d'interrompre la
>>> séquence à l'intérieur d'une boucle, et de reprendre au début de la
>>> boucle, comme si on avait terminé la séquence (avec incrémentation
>>> dans le cas d'une boucle "for")
>>
>> Il y au moins deux manières de faire ca sans "if":
>>
>> - utiliser un goto (puisque c'est exactement ce qui correspond à
>>   interrompre une boucle de manière "non naturelle"):
>>
>>   for ... loop
>>      [...]
>>      goto end_of_loop;
>>      [...]
>>   <<end_of_loop>>
>                        null;  --  ;-)
>>   end loop;
>>
>> - utiliser une autre boucle imbriquée:
>>   for ... loop
>>      loop
>>         [...]
>>         exit;
>>         [...]
>>         exit;
>>      end loop;
>>   end loop;
>>
>> La deuxième solution est moins élégante que la première, est n'est  
>> proposé
>> que pour les allergiques au goto. Le goto est la meilleure  
>> solution dans
>> ce cas précis.


J'ai vu des arguments contre le goto qui m'ont parus très bon
(Par exemple, qu'est ce qu'il se passe si on fait un "goto  
end_of_loop" à l'extérieur de la boucle for ?)

Toi t'as rien contre ? Tu l'utilises souvent ?


Cela dit, je comprends que tu trouves le "loop exit" pas très  
élégant, puisqu'on utilise un loop uniquement pour sa fonctionnalité  
"exit", jamais pour executer plusieurs fois la séquence

Et entre-temps, j'ai pensé à une 3eme possibilité, que je trouve plus  
élégante que les 2 ci dessus :

    for ... loop
       declare
          continuation : exception;
       begin
          [...]
          raise continuation;
          [...]
       exception
          when continuation =>
             null;
       end;
    end loop;


Notez que si on met le bloc avec l'attrape-exception à l'extérieur de  
la boucle for, ça devient équivalent (sauf erreur) au "exit"
Mais c'est quand même moins bien

Est ce que les gens chargés d'ada 2005 ont parlé d'une fonctionnalité  
"continuation", qui aurais été rejetée, ou pas du tout ?


Ca m'a aussi fait penser qu'on pourrait étendre la fonctionnalité  
"exit" à tous les blocs, que ça soit pas limité aux blocs de type boucle
Qu'en pensez vous ?


-- 
j'agis contre l'assistanat, je travaille dans une SCOP !


_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.