TUTORIEL ALGO/METHODES 
Les ruptures de séquence
Longtemps bannies de tout programme "propre", les ruptures sont revenues en force sous la forme des instructions break, default, continue et return. (01/06/2004)

Après les "Listes, Piles et Files", nous abordons ici un autre aspect fondamental de la programmation : les ruptures ou interruptions. Une rupture correspond a un évènement mettant un terme au programme ou à la routine en cours d'exécution, et lançant un autre programme/une autre routine (appelée Routine de Service d'Interruption / Interrupt Servicing Routine). L'appellation "rupture de séquence" vient du fait que la suite d'instructions n'est dès lors plus exécutées dans l'ordre établi.

Dans les premiers langages de programmation (Basic...), la rupture se présentait généralement sous la forme d'un GOTO renvoyant directement à une ligne du programme. Disparue lors de l'arrivée des premiers langages de programmation structurée (Pascal...). Les langages récents (C et ses descendants, Perl...) ont réintroduit le concept de rupture de séquence, notamment pour l'usage d'étiquette ou au sein de boucles contenant par exemple un break.

Les rupture sont fondamentales au point que, tout comme les listes, piles et files précédemment abordées, il est plus que certain que la majorité des développeurs ont souvent eu recours à ce procédé, mais peut-être un certain nombre d'entre eux sans pour autant savoir le nommer.

Dans la plupart des langages modernes, ces ruptures sont repérable par les mots-clés break, continue, return et default quand on se trouve dans une boucle switch..case. Le saut à la ligne de type GOTO étant depuis longtemps reconnu comme étant une mauvaise pratique, de nombreux langages (comme Java et JavaScript) le définissent comme mot-clé mais en annulent toute signification. GOTO étant souvent utilisé lors d'erreurs, Java a résolu le problème en utilisant la notion d'exception (try..catch).
La différence entre l'instruction GOTO et les quatre autres (break, continue...), et l'erreur majeure de GOTO, se situe dans le fait que cette instruction renvoie vers une position précédente du code (aboutissant à ce que l'on appelle le "code spaghetti"), tandis que les quatre autres renvoient (le plus souvent) vers un point du code situé logiquement après la boucle qu'elles interrompent.

La boucle switch..case est l'exemple le plus courant d'interruption :

switch (numeroMois)
  {
  case 0:
    nomMois = "Janvier";
    break;
  case 1:
    nomMois = "Février";
    break;
//etc.
  case 11:
    nomMois = "Décembre";
    break;
  default:
    nomMois = null;
    msgErreur = "Pas de mois défini!"
    break;
  }

Les ruptures sont indiquées en gras : les case x et default sont des étiquettes, et les break les ruptures elles-mêmes.

Par continue et return, les ruptures se retrouvent aussi très souvent dans les boucles les plus banales :

function tugudu()
  {
  while (x>0)
    {
    if (x>3)
      continue;
    x++;
    }
  return x;
  }


  Forum

Réagissez dans les forums de JDN Développeurs

Les étiquettes peuvent aussi être utiles en dehors de switch..case grâce à break et continue - on parle alors de "boucle étiquetée" :

monEtiquette:
  while (temoignage == true)
    {
    telleValeur++;
    prisonnierVaEnPrison();
    }

for (i = 0; i < a.length; i++)
  {
  if (a[i] = telleValeur)
    {
    break monEtiquette;
    }
  }

while (telleValeur <= 42)
  {
  continue monEtiquette;
  telleValeur++
  }


Dans le premier cas, l'instruction break met fin à la boucle for qui la contient : on n'y reviendra pas. Dans l'autre, continue relance la boucle en incluant les résultats de l'exécution du code de l'étiquette.
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page