C'est clair que les exceptions, même en C++, sont l'exemple type d'un procédé implicitement mis en oeuvre avec des GOTO.
Dans le même genre: En 1985, j'écrivais en BASIC:
10 I=1
20 PRINT I
30 I=I+1
40 IF I<20 THEN GOTO 20
Plus tard, j'ai découvert que les vrais l33t utilisaient FOR TO NEXT
10 FOR I=1 TO 20
20 PRINT I
30 NEXT
C'est vachement plus beau, hein ? On a officiellement défini la boucle au sein du programme. Et qu'est-ce que cela nous rapporte ?
- La syntaxe est moins intuitive pour un débutant que celle du IF. Passons.
- La boucle est implémentée au final exactement de la même façon qu'avec un GOTO (utilisation d'un JMP conditionnel en assembleur).
- On est obligé d'utiliser de l'espace dans la pile pour retrouver la boucle. On risque le débordement dans le cas où la fonction est récursive et a été mal écrite.
- On est obligé d'utiliser un EXIT pour sortir explicitement de cette boucle. Un GOTO n'est pas envisageable car du coup, l'espace occupé dans la pile n'est pas libéré, le langage ne sait pas que l'on a quitté la boucle, et on risque de s'y retrouver contre son gré au prochain NEXT.
Les supposés progrès n'en sont donc pas toujours. C'est à mon avis toute la différence qui existe entre ceux qui abordent la conception logicielle en programmeurs et ceux qui le font en mathématiciens.
[^] # Re: Découvrez la communauté PHP
Posté par Obsidian . En réponse à la dépêche Découvrez la communauté PHP. Évalué à 1.
Dans le même genre: En 1985, j'écrivais en BASIC:
10 I=1
20 PRINT I
30 I=I+1
40 IF I<20 THEN GOTO 20
Plus tard, j'ai découvert que les vrais l33t utilisaient FOR TO NEXT
10 FOR I=1 TO 20
20 PRINT I
30 NEXT
C'est vachement plus beau, hein ? On a officiellement défini la boucle au sein du programme. Et qu'est-ce que cela nous rapporte ?
- La syntaxe est moins intuitive pour un débutant que celle du IF. Passons.
- La boucle est implémentée au final exactement de la même façon qu'avec un GOTO (utilisation d'un JMP conditionnel en assembleur).
- On est obligé d'utiliser de l'espace dans la pile pour retrouver la boucle. On risque le débordement dans le cas où la fonction est récursive et a été mal écrite.
- On est obligé d'utiliser un EXIT pour sortir explicitement de cette boucle. Un GOTO n'est pas envisageable car du coup, l'espace occupé dans la pile n'est pas libéré, le langage ne sait pas que l'on a quitté la boucle, et on risque de s'y retrouver contre son gré au prochain NEXT.
Les supposés progrès n'en sont donc pas toujours. C'est à mon avis toute la différence qui existe entre ceux qui abordent la conception logicielle en programmeurs et ceux qui le font en mathématiciens.