[VB.NET] Equivalent Goto Case

bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 - 25 juin 2008 à 20:52
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 28 juin 2008 à 11:42
Salut,

Je cherche l'équivalent en VB.Net de l'instruction C# Goto Case pour se déplacer dans un Select Case ?

Exemple en C# on peut faire :

switch (NEVEU)
{


      Case RIRI:
      '........
      Goto Case LOULOU

      Case FIFI:
      '........

      Case LOULOU:
}




Existe-t-il un équivalent ou dois-je mettre un point d'arret après chaque Case ?

Merci d'avance

Bonne prog
++
A voir également:

14 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 juin 2008 à 21:02
Effectivement, je ne connais pas de telle instruction, du moins en VB2005.

Je n'avais même pas imaginer cela possible, même en C#

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2008 à 22:43
salut,

surprenant oui. çà peut être pratique (la preuve ^^)
cependant comme on essaye tant bien que mal à eviter les goto...., peut-être qu'on peut plus t'aider dans ce sens non?

parce qu'à part mettre des étiquettes devant tes CASE, j'ai un ptit doute

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
25 juin 2008 à 23:34
Je viens de trouver ceci (si ça répond à ta question... je n'en sais ma foi rien...) :

http://forums.msdn.microsoft.com/en-US/vblanguage/thread/8173473b-da23-4053-8f9e-6de5157c88f7/
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 juin 2008 à 15:22
Bonjour

Ça reste un GOTO.

Normalement, tu pourrais t'en passer, mais il faudrait savoir ce que tu veux faire et comment.

Suggestion : mettre 2 Select Case l'un derrière l'autre (un peu bourrin, mais peu fonctionner).

L'ouverture d'esprit ne se limite pas toujours à une fracture du crâne.
VB (6, .NET1&2), C++, C#.Net1
Mo
0

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

Posez votre question
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 juin 2008 à 14:07
Salut,

Merci à tous pour vos suggestions.

Que pensez-vous de cette solutions pour ce passer du Goto 

Do 

    Select Case Neveu
        Case RIRI
            '...... 
            Neveu = "LOULOU"
        Case FIFI
            '.......
            Neveu = "EXIT"
        Case LOULOU
            '.......
            Neveu = "EXIT"
    End Select

Loop While Neveu <> "EXIT"

Bonne prog
++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2008 à 14:43
salut bouv,

le but est juste de faire certaines opérations? tu n'as plus besoin de Neveu ensuite?
dans ce cas, possible oui, mais tu pourrais alors aussi bien remplacer tes "neveu = "exit"" par "exit do"
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2008 à 14:44
ce qui revient au même au final....
(désolé du double post ^^)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 juin 2008 à 14:47
Bonjour,

Comme je l'aurais fait (pas forcément le mieux, mais cela évite un affreux goto et reste compréhensible).

Juste pour les perfs, je te conseil plutot neuveu="" pour sortir, comme ça tu fais "loop while Neveu.Length<>0", ce qui est plus rapide; mais c'est juste un pinaillerie.

http://nhen0039.chez-alice.fr/index.php
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 juin 2008 à 14:49
Bonjour,

Désolé pour le double post, mais la solution de PCPT est encore mieux que celmle que je propose (oublier de rafraichir avant de valider,dsl).

http://nhen0039.chez-alice.fr/index.php
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 juin 2008 à 17:23
Salut,


Oui, effectivement je n'ai plus besoin de Neveu ensuite.


J'ai effectivement pensé au Exit Do. Je pourrai également utiliser Do While True


Mais je voulais surtout un avis sur l'idée d'utiliser une boucle et le fait de modifier la valeur de la variable testée par le Select Case


Bonne prog
++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2008 à 17:51
beh pour faire "comme C#", donc un goto case, pas possible

possible de mettre des étiquettes devant chaque case

mais au final (en C# comme en VB.NET), que çà soit faisable ou non, c'est de toute manière déconseillé

changer la valeur d'une variable, si c'est juste pour tester la condition, un peu inutile. (non?)

reste le do loop sans condition (ou while true, c'est pareil) avec ton test pour en sortir

perso je choisirais cette dernière solution ;)
mais j'fais pas de dotnet ^^
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 juin 2008 à 23:59
OK, merci pour cet avis. Je vais donc faire ainsi (do loop sans condition).

Sinon concernant les Goto, c'est vraiment bizarre les différences de discours que l'on peut entendre.

En effet, on entend la généralement qu'il faut absolument éviter les Goto comme la peste.

Mais parfois, certaines personnes que je qualifieraient de plutôt crédibles, soutiennent qu'il s'agit d'une chasse aux sorcières, qu'il n'est pas si grave de les utiliser... etc

Voir par exemple le propos de Renfield à ce sujet il y à peu de temps.

Il faudrait presque ouvrir un Topic à ce sujet tellement les avis divergent.

Je suis novice en programmation. Ce n'est d'ailleurs pas mon métier, je programme pour le plaisir. Cependant, je me permet quand même de donner mon avis :

"Un code source c'est un peu comme un livre. On le lit de haut en bas et il nous dit ce qu'il permet de faire.
Le Goto peut casser cette structure. L'objectif d'un bon code est d'être facilement lisible et compréhensible.
Le Goto peut donc être utiliser s'il ne met pas en faille cette lisibilité. Il est évident que de placer plusieurs Goto dans une même procédure, certains en avant, d'autres en arrières, rend vite cette procédure illisible.
Mais certains Goto peuvent à mon avis servir cette lisibilité et dans ce cas pourquoi s'en passer.
Le Goto Case du C# est à mon avis un bon exemple. Je le trouve beaucoup plus simple que de mettre une boucle autour sur Select Case comme je suis obligé de le faire en VB. Il suffit simplement de placer les différents Case "ValeurATester" dans le bon ordre afin de ne faire que des Goto en avant. Ainsi cela ne casse en rien la lisibilité du code.
A utiliser donc avec modération."

Bonne prog
++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2008 à 05:39
y'a "quoi dire pour que çà marque" et "ce qu'il en est vraiment"

ton explication me semble bien coller à la réalité

un code asm, qui se voudra performant, pourra être truffé de goto
un code VB avec la moitié (quantité) de goto sera déjà dur à tracer et à déboguer.
c'est surtout pour çà qu'on dit (y compris dans de bons bouquins) qu'il faut "s'en tenir à distance autant que possible" 
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 juin 2008 à 11:42
Pour en revenir aux propos de Renfield que tu cite.

Le langage ASM est un langage très basique et très simpliste. Il est d'execution linéaire, il ne connait pas la notion de routine, sub, ou autre fonctions (je parle bien du langage lui même et non pas des IDEs qui servent pour le programmer).
Le Goto (qui n'est pas un goto mais un jump avec toutes ses variantes) est le seul moyen de casser l'execution d'un code pour aller en executer un autre temporairement ou définitivement suivant le cas.

D'ailleurs toutes vos fonctions, sub, évènements, ... en langage évolué sont traduit par des jumps dans le code ASM pour le compilateur. Traduit, mais sous controle du compilateur, c'est à dire avec sauvegarde du contexte, vérification des points de retour, ...

Pour ce qui est du Goto dans les langages évolués, ce n'est qu'un résidu "collant" des très vieux langages comme les premiers Basics par exemple. Ces langages aussi étaient d'execution linéaire et ne connaissait ni fonction, ni évènement.
Il n'y a qu'à regarder un code HPBasic datant des années 70 pour s'en rendre compte.
Petit à petit est apparu la notion de routine et l'appartion du mot clé GOSUB, puis les fonctions et les évènements des langages modernes.
A l'heure actuelle, le Goto ne devrait plus exister de tout. Personellement, en plus de 10 ans de codage, je n'en ai jamais eu besoin (sauf gestionnaire d'erreur en VB6 ou on peut pas faire autrement).
Je fais parti de ces développeurs qui ont appris que là ou il y a un goto, c'est un code mal conçu. Ce que je confirme par mon expérience. Souvent il suffit par exemple d'inverser une condition de test pour voir les autres autrement et grandement simplifie le code

Quant à C#, je me rappelle d'un blog ici même signalant et s'étonnant effectivement du retour du Goto dans C#3

Je terminerai avec cette remarque qui n'engage que moi.  Certes il est possible de se passer du Goto en se seravnt d'un artifice avec une boucle, mais, sauf cas vraiment particulier et toujours possible, ça ne résoud pas le problème de fond d'un code mal réfléchi et mal conçu. Ce que je pressents dans les exemples succints donnés dans ce sujet, tant C# que VB

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Rejoignez-nous