Evidemment que j'utilise bra en assembleur, ceci dit, c'est son emploi dans la programmatino structurée qui pose question. Pour moi, l'approche et la logique sont différentes, donc c'est pas comparable.
Pourtant, c'est parfois bien utile. D'ailleurs, si elle existe, c'est pour être utilisée, je doute que les concepteurs du langage ont créé une instruction uniquement pour ne pas l'utiliser. Ça n'empêche pas qu'elle ne doit pas être utilisée n'importe comment.

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
c'est ultra utile pour optimiser des tests de cas d'erreur sans dupliquer des tonnes de code.
Tout à fait, je l'utilise, je dis simplement que ça peut poser question, alors qu'en assembleur c'est pas le cas vu que c'est incontournable.
Liberons le goto, je suis goto!
C'est très utile pourtant, les goto dans les switches. J'en utilise souvent en C++ (et d'ailleurs c'est dommage que le C/C++ ne permet pas goto case 1;, on est obligés de rajouter un label case_1:, mais sinon ça marche très bien).
Jonas Le 10/01/2015 à 19:51 Merci GT pour cette "unpopular opinion" que je ne cesse de répéter depuis des années à mes ptits camarades qui pensent que seul l'objet (ou pire le java) ne vaut le coup!

"If you see strict DRM and copy protection that threatens the preservation of history, fight it: copy the work, keep it safe, and eventually share it so it never disappears. [...] no one living 500 years from now will judge your infringing deeds harshly when they can load up an ancient program and see it for themselves."
Benj Edwards - Why History Needs Software Piracy
- - -
Achat ou échange: topic de mes recherches
Meilleur smiley = #helico#
Obligatory XKCD(Comme quoi le goto c'est pas si mal ^^)
Pour moi le but du Goto est en aucun cas de rendre illisible mon code, mais combien de fois juste un petit saut peux t'éviter bien de retournement de morceaux de programme, de modification de structure.
Surtout que si c'est pour des raisons de lisibilité, je peux te donner des exemples de code (en assembleur) ou un label et un branchement seront beaucoup plus lisible / comprehensible qu'une version sans saut.
Un label si tu le baptise proprement peux apporter une belle aide a la lisibilité / compréhension d'un code.
Les personnes qui font du Java, je comprends que vous arrivez a vous en passez, vous coupez cotre code en si petit morceaux que c'est dure de placer un petit saut. C'est pas un reproche, je suis pas la pour critiqué tel ou tel langage, moi pour sauver le Goto !!
Qu'on nous rende notre Goto, et que ceux qui veulent l'utiliser l'utilise et l'inverse.
Moi je comprends pas qu'on puisse nous le retirer, ou faire des critiques méchantes, car aucun programme ne pourrait pas fonctionner sans aucun saut, car même si votre programme le fait pas, une fois compilé voire interprété, je suis sur qu'il le fait. Donc nous interdire de faire une chose que les autres ont le droit de faire, c'est pas cool !!
#JesuisGoto....
GoTo to the bugs !!!

je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)
Y'a un cas ou personnellement, j'aime bie utiliser goto, c'est pour écrire une fonction de traitement de texte type échappement de caractères (ou remplacement). En général on se trouve face à deux cas: soit y'a rien à modifier, soit y'a un truc à modifier, donc un cas où idéalement on n'alloue rien, soit y'a quelque chose à modifier, donc un cas où on alloue forcément au moins un nouveau buffer.
Y'a plusieurs façons d'écrire le code, mais par exemple:public static string DoubleQuotes(string text, char quote)
{
int i;
for (i = 0; i < text.Length; ++i)
if (text[i] == quote) goto DoDoubleQuotes;
return text;
DoDoubleQuotes: ;
var sb = new StringBuilder(text.Length + 2); // Chiffre magique pris presque au pif en espérant que ça marche bien la plupart du temps
sb.Append(text, 0, ++i).Append(quote);
int start = i;
for (; i < text.Length; ++i)
if (text[i] == quote)
sb.Append(text, start, -start + (start = i + 1)).Append(quote);
if (i > start)
sb.Append(text, start, i - start);
return sb.ToString();
}
Je met la version sans goto histoire de vous ménager un peu, mais j'aime moins: (Entre autres parce que ça fait un appel de méthode en plus et qu'on a pas souvent la chance d'avoir des optimisations tail call)public static string DoubleQuotes(string text, char quote)
{
for (int i = 0; i < text.Length; ++i)
if (text[i] == quote) return ReallyDoubleQuotes(text, quote, i);
return text;
}
private static string ReallyDoubleQuotes(string text, char quote, int i)
{
var sb = new StringBuilder(text.Length + 2); // Chiffre magique pris presque au pif en espérant que ça marche bien la plupart du temps
sb.Append(text, 0, ++i).Append(quote);
int start = i;
for (; i < text.Length; ++i)
if (text[i] == quote)
sb.Append(text, start, -start + (start = i + 1)).Append(quote);
if (i > start)
sb.Append(text, start, i - start);
return sb.ToString();
}
Et là y'a qu'une seule variable pour représenter l'état du parsing car c'est un cas simple (donc ça passe bien avec deux méthodes), mais c'est pas forcément toujours le cas.
(PS: J'ai écrit ce code sans le compiler ou le tester donc je garantis pas ne pas m'être foiré sur les calculs de plage de caractères)
