Blog de Grégory GHEZ

Pour chaque [ingénieur logiciel] qui affirme : "Personne ne s'embêtera à faire çà", vous trouverez un gamin en Finlande qui s'embêtera à le faire.  - Alex Mayfield

  Home :: Contact :: Syndication  :: Login
  37 Posts :: 4 Stories :: 3 Comments :: 0 Trackbacks

Article Categories

Archives

Message Categories

Liens

dimanche 11 septembre 2005 #

Il s'agit d'une instruction très peu utilisée mais qui peut s'avérer fort utile dans certains cas.
goto sert à faire saut non-conditionnel vers un label référencé autre part dans le code.

Exemple:

string
[] tab = {"Bonjour", "les", "gens"};
foreach (string s in
tab)
{
   foreach (char c in
s)
   {
      if
 (c == 'e')
         goto
Suite;
   }
}
return;

Suite:
   MessageBox.Show("Le caractère 'e' a été trouvé dans une des chaînes.");

Dans cet exemple, on comprends bien l'intérêt du goto, qui permet de passer directement à la suite du code si le test est concluant. Si nous n'avions pas utiliser le goto, on aurait eu la construction suivante:

string[] tab = {"Bonjour", "les", "gens"};
bool present = false
;

foreach
(string s in tab)
{
   foreach (char c in
s)
   {
      if
(c == 'e')
      {
         present =
true
;
         break
;
      }
   }

   if
(present)
      break
;
}

if
(present)
   MessageBox.Show("Le caractère 'e' a été trouvé dans une des chaînes.");

On voit bien qu'au niveau de la lisibilité et des performances, l'instruction goto l'emporte, en effet, vous évitez un saut non-conditionnel ainsi qu'un test conditionnel. Vous gagnez également quelques lignes de code, ce qui n'est pas pour déplaire lorsque l'on traite avec des fichiers contenant plusieurs milliers de lignes.

Remarques:
Lorsque vous déclarez un label (Suite dans notre exemple), vous devez impérativement le faire suivre d'une instruction. En effet, s'il n'y avait pas d'instruction entre le label et la fin de notre méthode, cela reviendrait à faire appel à l'instruction return directement.
Vous ne pouvez pas non plus faire un saut non-conditionnel goto vers un endroit du code qui ne serait pas dans la portée du code éxécutant l'instruction goto (On ne peut pas faire un saut du dehors d'une boucle vers l'intérieure de celle-ci par exemple).

Lien MSDN

posted @ 02:37 | Feedback (39)