Goto avec partie variable

cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013 - 13 avril 2013 à 16:49
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 14 avril 2013 à 07:57
Est t il possible d'avoir des goto ( vers labels "of course") avec une partie variable conditionnée.

Exemple

?SuffLabel 1 ou 2 ou 3 ou ?.
( code ???????? )
Goto Label & SuffLabel
?================================================================

Label1 :
( code ???????? )
Label2 :
( code ???????? )
Lable3 :
( code ???????? )
?================================================================

Je sais que ce code n'est pas permis, mais y a-t-il moyen d'avoir cette condition changeante dans le goto-label.

Raison : une énorme économie de tests dans mon exécution.

Raison de la demande : certains langages le permettent ( i.e. PL/I )

Merci de votre avis.


Pierre

10 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 avril 2013 à 19:07
Pas bonjour non plus.

Des Goto en .Net ?
Va falloir améliorer les méthodes !
Voir Select Case et autre organisation en If-Then-ElseIf-ElseIf-Else-End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
0
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
13 avril 2013 à 19:50
Des Goto en .Net ?

Et oui je sais, c'est le diable.

Mais je n'ai jamais été gêné de les utiliser ( pas trop, ce qu'il faut ) en 43 ans de programmations de toutes sortes.

Et puis soyez en certain, dans les select-case, do while, do until, loop et autres codes structurés, les compilateurs se chargent de les inclure pour vous dans les executables et load modules. Et ils en ajoutent des paquets.

Mon souci était justement d'eviter de passer par trop de "case" et trop souvent, ce qui pourrait dégrader les performances quand on traite de très gros volumes.

Cependant merci.

Pierre
0
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
13 avril 2013 à 19:52
A Jack.

Un bonjour avait été inclu dans le brouillon fait en word, mais est passé à la trappe en copier-coller.
Pour moi donc, la mauvaise relecture.

... et bonsoir maintenant ( gentillement dit )

Pierre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
13 avril 2013 à 19:58
Bonjour, PeD,
les compilateurs se chargent de les inclure pour vous dans les executables et load modules. Et ils en ajoutent des paquets.

Ce qui est certain, c'est que ceux qui seraient un jour conduit à assurer l'évolution et/ou la maintenance d'une appli, n'auront pas devant leurs yeux le résultat du compilateur, hein ... Et ils devront alors se "farcir" du code spaghetti (les goto) .
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
13 avril 2013 à 20:08
Je ne vais pas démarrer une polémique, mais je crois sincèrement que des goto bien choisis ne déteriorent pas lisibilité d'un programme.

Je puis certifier pour l'avoir vécu que recevoir et devoir maintenir des programmes avec des dizaines de perform procedure-a thru end-procedure-a procedure dans laquelle se trouve aussi perform procedure-b thru end-procedure-b ...... pour se retrouver dans la nième procédure avec juste une ligne de code , toutes procédures imbriquées les unes dans les autres ( vive la programmation structurée ) donne de sérieux maux de têtes

C'est vrai que peut-être à l'époque où j'ai commencé à programmer, on aimait assez les spaghettis
Le poids de son passé.
Désolé c'est ma manière, mais je serais assez hiumble pour ne pas la consiller non plus à d'autres.

Cheers

Pierre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
13 avril 2013 à 21:48
Si tu tins VRAIMENT aux pâtes italiennes, voilà du "macaroni trop cuit", en VB6 ===> transpose en VB.Net, alors :
 Dim Number As Integer, message As String
    Number = 2 ' ou 1 ou 3
    On Number GoSub label1, label2
label1:
    MyString = "dans label1"
    GoTo fini
label2:
    MyString = "dans label2"
    GoTo fini
label3:
    MyString = "dans label3"
    GoTo fini
fini:
MsgBox MyString

C'est carrément la "totale" de chez "totale"
Je décline bien évidemment toute récrimination éventuelle de toute personne qui aurait à maintenir un tel code

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
13 avril 2013 à 21:49
pardon ===>> corrige ===>> On Number GoSub label1, label2, label3


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
13 avril 2013 à 22:31
Bonjour,

Je ne suis pas sûr qu'un GOTIO ou on ... Gosub soit mieux.
(D'ailleurs Ucfoutu, On ... Gosub ... Tu as oublié les Return)

Le On ... GoSub n'est rien d'autre d'un autre format de Select Case, en moins lisible.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
13 avril 2013 à 22:45
D'accord pour dire que la solution de ucfoutu est un "select case" déguisé ( macaronis plutôt que spaghettis )

Mais en VB.Net si il n'existe pas de solutions comme je l'espère, c'est à dire pour rappel d'ouvrir un aiguillage au début du programme et de se passer de toutes les comparaisons pour prendre uniquement cet aiguillage, je garde alors la série de comparaisons, je n'ai pas d'autres choix.

J'ai peut-être omis de dire que le goto utilisé peut-être différent à chaque exécution de l'application, mais qu'une fois démarrée, ce sera toujours le même goto ( qui résulte du type d'input : fichier TXT, row MYSQL, row MSA, row MSSQL, input SWIFT, ..... ).
Pas sûr que je suis clair, mais si je devais l'être il me faudrait plus de place et de temps.

Encore un grand merci.

Bonsoir. Bon code. Bons tests. Bonnes exécutions, ...

Pierre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
14 avril 2013 à 07:57
Il est assez difficile de répondre vraiment utilement sans bien cerner les tenants et aboutissants d'une question.
Il n'est par exemple pas impossible que ta solution soit dans une utilisation astucieuse de la fonction CallByName.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0