bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 2019
-
25 juin 2008 à 20:52
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 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 ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 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."
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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"
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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