Appendice 1: Plus de structures de contrôle (obscures)
Dans le chapitre 2, un certain nombre de structures de contrôle ont été
introduites, comme while
, for
, et break
. Pour garder les choses simples,
j’en ai laissé d’autres de côté, qui, d’après mon expérience, sont beaucoup
moins utiles. Cet appendice décrit rapidement ces structures de contrôles
manquantes.
Pour commencer, il y a do
. do
fonctionne comme while
, mais au lieu
d’exécuter zéro ou plusieurs fois, il l’exécute une ou plusieurs fois. Une
boucle do
ressemble à cela :
do { var reponse = prompt("Dites 'meuh'.", ""); print("Vous avez dit '", reponse , "'."); } while (reponse != "meuh");
Pour bien montrer que la condition est seulement testée après une première exécution, on l’écrit à la fin du corps de la boucle.
Ensuite, il y a continue
. Celui-là est très lié à break
et peut être
utilisé aux mêmes endroits. Alors que le break
saute en dehors de la boucle
et fait continuer le programme après la boucle, continue
saute à l’itération
suivante de la boucle.
for (var i = 0; i < 10; i++) { if (i % 3 != 0) continue; print(i, " est divisible par trois."); }
Un effet similaire peut en général être obtenu simplement avec if
, mais il
existe des cas où continue
sera plus joli.
Quand il y a une boucle à l’intérieur d’une autre boucle, un break
ou un
continue
n’affectera que la boucle interne. Parfois, vous aurez envie de
sauter en dehors de la boucle extérieure. Pour être capable de référencer une
boucle spécifique, les boucles peuvent être labellisée. Un label est un nom
(n’importe quel nom de variable fera l’affaire), suivi de deux points (:
).
exterieur: for (var coteA = 1; coteA < 10; coteA++) { interieur: for (var coteB = 1; coteB < 10; coteB++) { var hypotenuse = Math.sqrt(coteA * coteA + coteB * coteB); if (hypotenuse % 1 == 0) { print("Un triangle rectangle avec ses côtés adjacents à l’angle droit de longueurs ", coteA, " et ", coteB, " a une hypoténuse de ", hypotenuse, "."); break exterieur; } } }
Ensuite, il existe une construction appelée switch
qui peut être utilisée
pour choisir quel code exécuter suivant une certaine valeur. C’est quelque
chose d’utile, mais la syntaxe JavaScript utilisée pour cela (qui est empruntée
au langage de programmation C) est si bizarre et moche que je préfère en
général utiliser une chaîne de if
à la place.
function conseilMeteo(meteo) { switch(meteo) { case "pluvieux": print("Pensez à prendre un parapluie."); break; case "ensoleillé": print("Habillez-vous légèrement."); case "nuageux": print("Allez dehors."); break; default: print("Type de temps inconnu : ", meteo); break; } } conseilMeteo("ensoleillé");
À l’intérieur du bloc ouvert par switch
, vous pouvez écrire un certain nombre
de labels case
. Le programme sautera au label qui correspond à la valeur
donnée au switch
, ou sautera à default
si on ne trouve aucune valeur
correspondante. Il commence alors à exécuter les instructions à cet endroit, et
continue à travers les autres labels, jusqu’à ce qu’il atteigne un break
.
Dans certains cas, comme le cas "ensoleillé"
dans notre exemple, cela permet
de partager du code entre plusieurs cas (il est recommandé d’aller dehors à la
fois pour le temps ensoleillé et pour le temps nuageux). La plupart du temps,
cela ajoute juste beaucoup de break
pas très jolis, ou bien cause des
problèmes quand vous oubliez d’en ajouter un.
Comme pour les boucles, on peut donner un label aux structures switch
.
Enfin, il y a le mot-clé nommé with
. Je ne l’ai en fait jamais utilisé
dans un vrai programme, mais j’ai vu d’autres personnes l’utiliser, il peut
donc être utile de savoir ce que c’est. Le code utilisant with
ressemble à
cela :
var pointDeVue = "extérieur"; var objet = {nom: "Ignatius", pointDeVue: "intérieur"}; with(objet) { print("Nom == ", nom, ", point de vue == ", pointDeVue); nom = "Raoul"; var nouvelleVariable = 49; } show(objet.nom); show(nouvelleVariable);
À l’intérieur du bloc, les propriétés de l’objet passé à with
agissent comme
des variables. Des variables nouvellement introduites ne sont toutefois pas
ajoutées à l’objet. Je suppose que l’idée derrière cette construction était que
cela pouvait être utile dans des méthodes qui utilisent beaucoup les propriétés
de leur objet. Vous pouvez commencer de telles méthodes avec with(this) {…}
,
et ainsi ne pas avoir à écrire this
tout le temps après cela.