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. |