Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » De l'utilisation des GOTO

neamar
Modérateur
Citer Windows XP Mozilla 4 - Posté le 03/09/2006 à 15:06
Comme le font remarquer beaucoup de livres et de sites, l'utilisation de GOTO est fortement prohibée quelque soit le langage, ceci afin d'éviter le code spaghetti.
Effectivement, l'utilisation du goto peut toujours être remplacée par uns sub, boucle do ou for.

Toujours ? Non ! 2 cas résistent encore et toujours à l'envahisseur :

-ON ERROR GOTO ...
Quel dommage de ne pas pouvoir faire un ON ERROR GOSUB ! En effet, le goto ne permet pas toutes les options de la sub (passage de param, retour à la ligne suivant l'appel...)

-Pb avec les for...
Ce cas est le seul (en BASIC) pour lequel l'utilisation du goto est obligatoire.
En effet et à ma connsaissance, l'instruction CONTINUE du C++ n'existe pas en basic.
On trouve bien le exit for..mais si on veut souater juste une donnée, il faut mettre un goto. (il y des cas ou l'on ne peut pas utiliser de IF...je me souviens l'avoir rencontré 2 ou 3x).

Alors pour ou contre l'utilisation du goto ?
Personellement, je suis contre... à 100% !
Before you criticize someone, you should walk a mile in their shoes. That way when you criticize them, you are a mile away from them and you have their shoes.

http://neamar.free.fr
Ou le portail général : http://neamar.fr
RemonterCiter Linux Firefox - Posté le 03/09/2006 à 16:15
Contre, bien entendu.

Ceci dit, si mes souvenirs sont bons le QuickBasic comprend les boucles DO...LOOP et FOR...NEXT associées aux mots clés WHILE et UNTIL.
Computaid SPRL - Conception - Développement - Infogérance : http://www.computaid.be
eTigris - Hébergement mutualisé - Serveurs dédiés : http://www.etigris.com
ml
ProgBoarder
RemonterCiter Windows XP Msie 6 - Posté le 06/09/2006 à 19:33
Contre les goto? Pourquoi? (confus)
Si on utilise pas les goto de mannière intenssive, sa peu vraiment aider.
Un programme fait uniquement de goto n'est pas un bon programme, en fin... pour celui qui lis le code.
Mais dela a exclure le goto... Il faut juste savoir ou placer c'est goto.
De plus, je peu me tromper mais une instruction if en assembleur effectue un goto plus une routine de test. Sa ce n'est que mon avis...
ML
Francesco
Modérateur
RemonterCiter Linux Firefox - Posté le 06/09/2006 à 19:40
Tout dépend de l'utilisation que l'on en fait.
Si c'est pour retranscrire avec des IF et des GOTO des instructions comme DO, FOR, WHILE, ce n'est pas la peine effectivement.

Par contre, dans le cas d'optimisation par exemple, les GOTO peuvent se révéler très efficaces...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
RemonterCiter Linux Firefox - Posté le 07/09/2006 à 14:37
Alors que les GOTO débouchent fatalement sur un programme en "spaguettis", l'utilisation de boucles bien pensées introduit un algorythme bien plus logique et compréhensible à ceux qui n'ont pas participé à l'élaboration du programme.

Je n'utilisais que très rarement l'instruction GOTO alors que je développais APOPHIS-OS en QBASIC, il est maintenant complètement exclus pour moi d'utiliser une instruction similaire dans tout autre langage.
Computaid SPRL - Conception - Développement - Infogérance : http://www.computaid.be
eTigris - Hébergement mutualisé - Serveurs dédiés : http://www.etigris.com
Francesco
Modérateur
RemonterCiter Linux Firefox - Posté le 07/09/2006 à 17:37
Neliger, les GOTO ne débouchent pas fatalement sur un programe "spaguettis", tout dépend de l'utilisation que l'on en fait.

Les GOTO ont leurs utilités, il faut juste les utiliser pour cela et non pour autres choses.
Il est souvent recommandé au débutant de ne pas utiliser GOTO car, effectivement, là ca fait du code spaghéttis.

Pour donner un autre exemple d'utilité des gotos, en plus des optimisations du code, un goto bien placé peut avantagement remplacer, un nombre incroyable d'imbrication de IF dans un autre IF. Et la on y gagne même en lisibilité...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
neamar
Modérateur
RemonterCiter Windows XP Msie 7.0 - Posté le 09/09/2006 à 10:33
Pour donner un autre exemple d'utilité des gotos, en plus des optimisations du code, un goto bien placé peut avantagement remplacer, un nombre incroyable d'imbrication de IF dans un autre IF. Et la on y gagne même en lisibilité...=>Perso dans ce cas là j'utilise une sub qui a l'avantage d'être réutilisable et en plus plus facilement retrouvable dans le code lorsque celui-ci est relativement conséquent.

Enfin c'est mon avis...


Before you criticize someone, you should walk a mile in their shoes. That way when you criticize them, you are a mile away from them and you have their shoes.

http://neamar.free.fr
Ou le portail général : http://neamar.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Msie 6 - Posté le 09/09/2006 à 11:41
(héhé Salutations.

Le cas de conscience posé par les GOTO (emploi ou non ?) a déjà été abordé en :
- - > http://www.progboards.com/sujet-795.php
Personnellement je ne sais pas faire sans les utiliser, et je ne pense pas pour autant écrire du code "spaghetti". Mais les étiquettes de destination doivent être facilement localisables et explicites. Celles que j'utilise sont de la forme Xnn.EXPLICATION. Avec X qui varie de A à Z et nn qui varie de 01 à 99, EXPLICATION étant semblable à une remarque.
Avant mon inscription, j'ai communiqué en :
- - > http://www.progboards.com/sujet-623.php
Voir Re[4]: Qbasic : la saisie des variables (Programme), un petit module de saisie au clavier.
Dans GS03.ALPHA: ' ***** SAISIE ALPHANUMERIQUE, il y a au moins VINGT
GOTO ! Sans ces derniers, comment pratiquer ? Dans sa forme actuelle, est-ce du spaghetti ?
Il n'y a eu aucune réaction de qui que ce soit …..

En cas de SELECT CASE, que mettre en CASE ELSE ?
Dans le cas de contrôle de validité d'une saisie numérique (Date, Heure, Mini et Maxi), comment faire ? Pourtant, un message est parfois indispensable et un GOTO vers une nouvelle saisie s'impose.

(gêné) Mes excuses, mais je continuerai à utiliser les GOTO.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
Francesco
Modérateur
RemonterCiter Linux Firefox - Posté le 09/09/2006 à 12:34
neamar>je ne vois pas comment tu te débarrasse de l'imbrication successif des IF. Si tu mets tout dans une SUB, alors tu ne fais que déplacer le problème.

Je parlais de l'utilisation des GOTO pour éviter cette imbrication successive, pas pour la déplacer.
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
RemonterCiter Linux Firefox - Posté le 09/09/2006 à 13:52
Francesco, je ne développe plus en QBasic depuis longtemps maintenant, mais depuis je n'ai jamais plus utilisé le moindre GOTO, et le code obtenu est bien plus compréhensible qu'avec cette méthode archaïque de voir les structures.
Computaid SPRL - Conception - Développement - Infogérance : http://www.computaid.be
eTigris - Hébergement mutualisé - Serveurs dédiés : http://www.etigris.com
Francesco
Modérateur
RemonterCiter Linux Firefox - Posté le 09/09/2006 à 14:27
j'ai l'impression que tout le monde crois que j'utilise tout le temps les GOTO. Je tiens à rectifier et à dire que je ne les utilise moi-mêmes quasiment jamais.

Je tenais juste à dire que ce n'est pas parce que les GOTO ont tendances à produire du code spaghettis qu'il faut les banir. Si le code est du code spaghetti, cela vient du programmeur, qui en a fait une mauvaise utilisation.

Je ne les utilises plus car je n'en ai plus besoin, maintenant qu'il existe d'autre outils. J'utilisais les goto en C et en basic dans des portions de code où la gestion des erreurs étaient capitales. Maintenant, je programme en C++ et j'utilise les exceptions.
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,402 s - Crédits - Stats
1 connecté