Javascript Les structures de contrôle
Fondamental (préambule) Dans un algorithme, on doit pouvoir faire prendre une décision au programme. Pour cela, on utilise des structures de contrôle. Sous cette appellation, nous retrouvons : Des conditions : si telle chose est vraie, alors fait ceci et sinon fait cela. les boucles : elles permettent de répéter plusieurs fois une série d'instructions.
Conditions
Le test conditionnel if (chose à tester) { instruction 1; instruction n; Exemple if (prix > 50) { alert( Trop cher!! ); Si la variable prix contient un chiffre supérieur à 50, la valeur booléenne de l expression entre () est vrai, donc l instruction alert est exécutée
et sinon? Exemple if (prix > 50) { alert( Trop cher!! ); else { alert( Achat validé ); Si la variable prix contient un chiffre supérieur à 50, la valeur booléenne de l expression entre () est vrai, donc la première instruction alert est exécutée... dans le cas contraire, c est la deuxième instruction alert qui est exécuté
Le si sinon La structure de contrôle if vous autorise à compliquer encore votre écriture : if (condition) { Instruction1; Instruction2;... else if(cond2) {//=> bloc si condition = "false" et cond2 = "true" Instruction3; Instruction4;...... else { //=> bloc si condition = "false" et cond2 = "false" Instruction5; Instruction6;...... Instruction7; // => suite des instructions à réaliser
Et plusieurs en même temps x=5 r="non" Opérateur logique ET if ( x == 5 && r!="oui" ) { document.write("ok"); Opérateur de comparaison numérique Si les deux conditions sont réunies, l instruction est exécutée. Opérateur de comparaison alpha-numérique
Opérateurs logiques && (cond1 && cond2) la condition 1 ET la condition 2 doivent être vraies simultanément (cond1 cond2) Vrai si l une des 2 conditions est vrai, pas les 2!!!(condition) Négation : si la condition n est pas vrai Les opérateurs logiques binaires, sont très utiles, mais pas dans le web et en tout cas pas tous les jours. :-) & 15 & 3 = 3 ET binaire : 15=1111, 3=0011. le ET donne 0011, soit 3 10 6 = 14 OU binaire : 10=1010, 6=0110. Le OU donne 1110, soit 14
Histoire de logique Le OU logique est tolérant : Exemple (homme == beau OU homme == riche) au moins 1 des 2. Si c est les 2, c est mieux! Le OU exclusif est dictateur : Exemple (couleur == bleu OU couleur == gris) C est l un ou l autre. point. C est pas les deux, et c est pas aucun des deux non plus
Opérateurs de comparaison > supérieur Ces opérateurs peuvent être utilisés sur des < inférieur variables numériques ou chaîne en fonction de votre algorithme. >= supérieur ou égal <= inférieur ou égal == égal!= différent Attention au typage des variables : a= 10000, b= 4 ; (a>b) est faux a=10000, b=4; (a>b) est vrai
Instruction switch A la place d une cascade de else if, préférez, si possible, une structure plus élégante : switch (expression) { case valeur1 : InstructionA; break; case valeur2 : InstructionB; break; default : InstructionZ;
Exemple de switch rep=prompt("what's up doctor?"); switch (rep) { case "bad": document.write("don't worry, be happy"); break; case "fine": document.write("congratulations"); break; default : document.write("what do you say?");
Boucles
tant que while répète l'exécution du bloc d'instructions qu'elle contrôle tant que l'expression logique est vraie. while (condition) { instruction 1; instruction 2; instruction N;... Attention aux boucles infinies ou, au contraire, à celles qui semblent ne jamais fonctionner.
var somme=0; var i=1; while (i<10) { somme += i; i++; document.write(somme+ <br /> ); document.write("la somme des 9 premiers nombres est : "+somme);
une variante... L'instruction do suivie de while permet de réaliser une variante while : Un passage par la boucle sera systématiquement exécutée par do, la condition sera évaluée en fin de boucle par while. Syntaxe : do { // effectue la boucle instruction1; instruction2:... while(condition) // bouclera de nouveau si condition = true Dans d autres langages, on utilise une autre variante until soit jusqu à ce que
Précautions Il est bien entendu possible de combiner tous les opérateurs logiques dans ces boucles. Évitez absolument d accumuler plusieurs négations N hésitez pas à mettre des alert dans la boucle pour vérifier que les variables prennent bien les valeurs prévues. Testez avec différents cas ou contextes, même peu vraisemblables. Une variable peut être de type inattendu : un simple espace devant un chiffre transforme le type en chaîne Une variable peut être vide, ce qui n est pas égal à 0
Boucle for L'instruction for à 3 rôles : elle effectue une initialisation en début de traitement, elle répète l'exécution du bloc d'instructions qu'elle contrôle tant qu'une condition logique est vraie, elle effectue un traitement de fin de boucle à chaque itération. for (initialisation; condition; incrément) { instructions......
Exemple var somme=0; for (i=0; i<10; i++) { somme += i; Au départ, le compteur i vaut 0. Puis, à chaque tour, si le compteur est inférieur à 10 on lui ajoute 1 et on tourne alert("la somme des 9 premiers nombres est : "+somme);
Autres boucles Il est possible de boucler sur un tableau ou les propriétés d un objet var MonTableau = new Array("rouge", "vert", "bleu", "jaune"); for (t in MonTableau) { document.write("couleur ") document.write(t); document.write(" : "+ MonTableau[t] + "<br />");
Parenthèse : Les tableaux Une variable de type tableau possède au moins un indice permettant d'accéder directement à une des valeurs de ce dernier. L indice commence à 0. Il existe des tableaux à une dimension ou à n dimensions : ce sont des tableaux de tableaux. Si l indice est une chaîne alphanumérique, c est un tableau associatif. Nous reviendrons sur les méthodes et propriétés propres au tableaux
Rupture de boucle 1 L instruction break permet de quitter prématurément une boucle, ou plusieurs, si elles sont imbriqués. C est un outil d optimisation très utilisée en algorithmique et donc en programmation, quel que soit le langage. Par exemple, si l on parcours un tableau de données à la recherche d une valeur, il serait idiot de parcourir tout le tableau de 500 lignes alors que l on a trouvé ce que l on cherche à la ligne 4.
Exemple de break c1 = 0; bouclea: while ( c1 < 11 ) { document.write("compteur boucle 1 : " + c1 + "<br />"); for (c2=0;c2<5;c2++) { document.write(" - compteur boucle 2 : " + c2 + "<br />"); if (c1 == 7 && c2 == 2) break bouclea; c1++
Rupture de boucle 2 L instruction continue permet de d ignorer les instructions qui suivent, dans la boucle. C est aussi un outil très utilisé, sans doute dans une moindre mesure, car mal connu. Il s agit la de commencer chaque tour de boucle par un test qui détermine si le traitement doit s'effectuer ou pas
Exemple de continue c1 = 0; while ( c1 < 11 ) { document.write("compteur boucle 1 : " + c1 + "<br />"); for (c2=0;c2<5;c2++) { if (c1 == 8) continue; document.write(" - compteur boucle 2 : " + c2 + "<br />"); c1++
Gestion des exceptions Comme dans tous les langages objets la gestion des erreurs se fait par le mécanisme des exceptions. ceci permet d'intercepter des anomalies dans des objets utilisés dans un bloc. Les anomalies sont déclenchées par l'instruction throw (nom_erreur). L'argument nom_erreur permet de vérifier quel est le type d'erreur déclenchée. Le mot clef try définit le bloc dans lequel l'erreur sera interceptée. Le mot clef catch définit le bloc dans lequel l'erreur sera traitée.
Exemple var x = prompt("entrez une valeur numérique de 0 à 20 :", ''); try { if(x > 20) throw "ErrMax"; else if(x < 0) throw "ErrMin"; else if(isnan(x)) throw "ErrNAN"; catch(err) { if(err == "ErrMin") alert("nombre trop petit"); if(err == "ErrMax") alert("nombre trop grand"); if(err == "ErrNAN") alert("il faut entrer un nombre!");