[VB.NET] Equivalent Goto Case

Signaler
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
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
++

14 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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/
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
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
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
ce qui revient au même au final....
(désolé du double post ^^)
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
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
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
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
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
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
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
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" 
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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