|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 623 ![]() |
exit permet de sortir d'une boucle
mais pour mettre fin à l'itération courante et aller directement à la suivante, n'y a t-il pas mieux en ADA qu'un "goto" ? Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Membre régulier
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 44 ![]() |
Il n'y a pratiquement jamais besoin d'un GOTO en Ada.
Faire : Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 623 ![]() |
par commodité, vous avez placé le "end if" devant le "end loop", mais prenons
le cas suivant (les . en colonne 1 sont des instructions quelconques) Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Mathématicien Inscription : mars 2012 Messages : 59 ![]() |
Code :
|
||
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 623 ![]() |
l'appel d'une procédure/fonction entre "loop end loop;" est en effet une
solution par contre "if ok then" à plusieurs endroits du code, c'est pire que le "goto" |
|
|
00
|
|
|
#6 | ||||
|
Membre régulier
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 44 ![]() |
Rien ne vaut un exemple pour montrer qu'on peut traduire une boucle en C++ avec 2 <continue> en Ada sans aucun GOTO.
Au début, on rale, mais après on constate que le code Ada est plus clair : Code C++ de départ : Code :
Code :
|
||||
|
|
00
|
|
|
#7 | ||
|
Membre régulier
![]() Mathématicien Inscription : mars 2012 Messages : 59 ![]() |
Probablement tout le monde est d'accord sur le fait qu'on n'a jamais besoin d'un "goto".
Maintenant, l'absence d'un "continue" ou "next" peut AMHA entraîner des constructions qui alourdissent le code ou le sur-indentent, exactement de la même manière que si l'instruction "return" manquait pour sortir d'une procédure quand il n'y plus de bonne raison de continuer. J'ai quelques souvenirs de programmation Pascal où l'enjeu était d'arriver à "end" dans tous les cas et bien sûr sans devoir recourir à un "goto" (<- pouargh!)... J'ajoute "goto loop end" à ma liste de voeux pour Ada 2020 ;-) . Il faudrait juste éviter le mot-clé "goto" qui a une triste réputation... Juste encore une idée moche pour simuler "continue" ou "next": Code :
|
||
|
00
|
|
|
#8 | ||
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 623 ![]() |
par provocation, je remplace le label "essai" par "continue"
sinon cette solution n'est pas si moche que cela et me plait mieux que la procédure/fonction évoquée pour 2025, je demande Code :
|
||
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 21 ![]() |
Vu que ça n'a pas encore été proposé, je suggère le recours à une exception :
Code Ada :
|
||
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 44 ![]() |
L'exception répond bien à la question, il reste juste à vérifier qu'il n'y a pas de pénalité en temps d'execution : suivant l'"implémentation, le traitement d'exception peut être couteux.
|
|
|
00
|
|
|
#11 | ||
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 623 ![]() |
cela ne marche pas trop bien si à l'intérieur du loop, il y a des conditions qui entrainent "next", d'autres qui entrainent "exit" à un ou plusieurs niveaux
en fin de compte, la boucle "une fois" de Zerte répond le mieux au problème Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour.
Pour ma part, je préfère les constructions à base de "case". Code ada :
__________________
Mon développement |
||
|
|
00
|
|
|
#13 | ||
|
Membre régulier
![]() Mathématicien Inscription : mars 2012 Messages : 59 ![]() |
Code ada :
! Désolé, je n'ai pas pu résister |
||
|
00
|
|
|
#14 | |||
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 21 ![]() |
Citation:
Il faut impérativement effectuer un traitement à la sortie de la boucle for pour savoir si on est sorti pour la prochaine itération ou qu'on a atteint un cas d'arrêt. Alors qu'un exit dans le code utilisant une exception sortira bien de la boucle infinie, même si c'est très pénalisant niveau temps d'exécution de gérer une exception (comme supposé par poincare).Il est par contre vrai qu'au lieu de "null;" dans le bloc exception il faudrait plutôt mettre "gestion pour être sûr à 100% de ne pas boucler infiniment" car sinon ça pourrait se révéler problématique. EDIT : ou sinon de gérer ça juste avant de lever l'exception, ce qui serait plus pratique si on veut passer à l'itération suivante pour diverses raisons nécessitant un traitement particulier. |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com