Post by Joe CoolPost by Jean-marcPost by Joe CoolC'est le cas, sauf chez les mauvais (ou les vieux) programmeurs.
Sauf avec les langages qui n'ont pas de mécanismes d'exception,
de try-catch, etc.
Il faut être vieux (ou mauvais) pour rédiger des programmes de haut
niveau en assembleur, en cobol ou en C.
Post by Jean-marcDans ce cas, le "goto avec contraintes" (une seule étiquette de saut
par fonction, saut toujours en avant, goto utilisé seulement
pour de la gestion d'erreur) est une bonne pratique, courante.
La bonne pratique est de changer de langage quand le langage est mauvais.
Post by Jean-marcOn a déjà évoqué le sujet ici même et la conclusion était la
même pour à peu près tous : il vaut mieux un "bon goto" qu'un
code à profondeur d'indentation ridicule.
Je suppose que «tous» fait référence aux vieux programmeurs en retraite
qui ont du temps à perdre dans les fora.
Post by Jean-marcFinalement, peu de personnes ont réellement compris ce qu'avait
voulu dire Dijkstra dans son article et on le cite à tort et à
travers, un peu comme les gens qui n'y connaissent rien en maths
se gargarisent en citant le(s) "théorème(s) d'incomplétude de Gödel" ...
Dijkstra était très claire, aussi limpide que d'appeler un chat un chat.
Quand il dit «pas de goto», ça signifie «pas de goto».
Le fait d'être jeune n'excuse pas la méconnaissance des règles de base
de la grammaire (Dijkstra était un monsieur), ni l'histoire de
l'informatique. D'autant plus que même en ayant eu une éducation
lamentable (ce n'est pas de votre faute, mais pensez à voter pour des
politiciens proposant de libérer l'éducation pour vos enfants et
l'avenir du pays), vous avez la chance de nos jours de pouvoir accéder à
ces connaissances via Internet et le web.
En particulier, l'article du Pr. Edsger W. Dijkstra intitulé "Go To
Statement Considered Harmful" n'est pas intitulé "Interdisons le Go
To". Il mentionne simplement que l'usage de "Go To" peut faire du mal,
et qu'il préfèrerait qu'on l'évite dans les langages de haut niveau.
Mais ceci tient seulement une phrase sur tout un article. En lisant le
reste de l'article, on se rend compte que :
- ce n'est pas seulement le "Go To" qui est mauvais, mais toute
construction syntaxique dont le niveau d'abstraction ne correspond pas
au problème traité (et donc par voie de conséquence que toutes les
instructions de tous les langages peuvent être considérées mauvaise
(selon le niveau d'abstraction requis par le problème à résoudre),
sauf en Lisp oú on a les macros de lisp qui permettent d'introduire
des constructions syntaxiques du niveau d'abstraction voulu).
- ce n'est pas tant l'instructon "Go To" en soi qui est mauvaise,
(puisqu'on peut mécaniquement transformer un programme plein de "Go
To" en programme n'utilisant que des instructions "while"), mais la
façon dont on structure le programme. (Bien sur, si on a un langage
qui ne permet pas de créer ses propres abstractions syntaxiques
(parmis les langages connus, seul lisp le permet (Common Lisp, Scheme,
etc), on est bien obligé d'utiliser ce qu'on a. Des méthodes de
programmation comme L.C.P. ont été inventées afin de structurer
proprement un programme en utilisant des "Go To").
"The exercise to translate an arbitrary flow diagram more or less
mechanically into a jump-less one, however, is not to be recommended.
Then the resulting flow diagram cannot be expected to be more
transparent than the original one." -- Dijkstra
--
__Pascal Bourguignon__
http://www.informatimago.com