Les Fondamentaux de JavaScript : Conditions et Boucles
Contexte du cours : Maîtriser la Programmation JavaScript
Bienvenue dans cette leçon fondamentale du cours "Maîtriser la Programmation JavaScript" ! Aujourd'hui, nous allons plonger au cœur de la logique de programmation : la prise de décision et la répétition de tâches. Ces deux concepts, les conditions et les boucles, sont absolument essentiels pour écrire des programmes dynamiques, réactifs et efficaces. Sans eux, un programme ne serait qu'une séquence linéaire d'instructions, incapable de s'adapter aux données ou aux interactions de l'utilisateur.
En maîtrisant les conditions, vous apprendrez à guider le flux d'exécution de votre code, le faisant réagir différemment selon certaines circonstances. Avec les boucles, vous découvrirez comment automatiser des tâches répétitives, évitant ainsi de copier-coller du code et rendant vos programmes beaucoup plus concis et performants. Préparez-vous à poser les bases de votre logique de développeur JavaScript !
1. Les Conditions en JavaScript : Prendre des Décisions
En programmation, les conditions nous permettent d'exécuter différents blocs de code en fonction de la validité (vraie ou fausse) d'une expression. C'est le moyen pour votre programme de "réfléchir" et de prendre des décisions.
1.1. L'instruction if...else if...else
C'est la structure conditionnelle la plus fondamentale et la plus utilisée. Elle permet d'exécuter un bloc de code si une condition est vraie, et éventuellement d'autres blocs si des conditions alternatives sont vraies, ou un bloc par défaut si aucune condition n'est vraie.
-
Syntaxe de base :
if (condition) { // Code à exécuter si la condition est vraie } else if (autreCondition) { // Code à exécuter si autreCondition est vraie (et que la première était fausse) } else { // Code à exécuter si toutes les conditions précédentes sont fausses } -
Explication :
- Le mot-clé
ifest suivi d'une paire de parenthèses()contenant une expression conditionnelle. Cette expression est évaluée et doit retourner une valeur booléenne (trueoufalse). - Si l'expression est
true, le bloc de code situé entre les accolades{}est exécuté. - Si l'expression est
false, le programme passe à la clauseelse if(si elle existe). - La clause
else ifpermet de tester une nouvelle condition si la précédente était fausse. Vous pouvez en avoir plusieurs. - La clause
elseest facultative et représente le "cas par défaut" : son bloc de code est exécuté si aucune des conditionsifouelse ifprécédentes n'était vraie.
- Le mot-clé
-
Exemple pratique : Vérifier l'âge pour voter
let age = 18; let pays = "France"; if (age >= 18 && pays === "France") { console.log("Vous êtes éligible pour voter en France."); } else if (age < 18) { console.log("Vous êtes trop jeune pour voter."); } else { console.log("Vous n'êtes pas éligible pour voter en France (peut-être pas la bonne nationalité, ou autre critère non rempli)."); } // Un autre exemple avec un âge différent age = 16; if (age >= 18) { console.log("Majeur."); } else { console.log("Mineur."); }- Explication du code :
- Dans le premier bloc
if, nous utilisons l'opérateur logique&&(ET) pour vérifier siageest supérieur ou égal à 18 ET sipaysest exactement "France". Si les deux conditions sont vraies, le message d'éligibilité s'affiche. - Si la première condition est fausse (par exemple, l'âge est 16), le code passe au
else if. Ici, on vérifie si l'âge est inférieur à 18. Si c'est le cas, le message "trop jeune" s'affiche. - Enfin, le
elsecapture tous les autres cas (par exemple,ageest 18 maispaysn'est pas "France"), affichant un message générique. - Le second exemple est une simple
if/elsepour démontrer la base.
- Dans le premier bloc
- Explication du code :
1.2. Opérateurs de Comparaison et Logiques
Les conditions reposent sur l'évaluation d'expressions qui utilisent des opérateurs :
-
Opérateurs de comparaison :
==: Égalité de valeur (peut effectuer des conversions de type)===: Égalité stricte (valeur et type) - Toujours préférer cet opérateur!=: Inégalité de valeur!==: Inégalité stricte (valeur ou type différent)<: Inférieur à>: Supérieur à<=: Inférieur ou égal à>=: Supérieur ou égal à
-
Opérateurs logiques :
&&(ET logique) : Retournetruesi les deux opérandes sont vrais.||(OU logique) : Retournetruesi au moins un des opérandes est vrai.!(NON logique) : Inverse la valeur booléenne de l'opérande (transformetrueenfalseet vice-versa).
1.3. L'instruction switch
Lorsque vous avez de multiples conditions basées sur la même variable ou expression, l'instruction switch peut être plus lisible et performante que de multiples else if.
-
Syntaxe :
switch (expression) { case valeur1: // Code à exécuter si expression === valeur1 break; // Important ! case valeur2: // Code à exécuter si expression === valeur2 break; case valeurN: case valeurM: // On peut grouper des cas sans break // Code pour valeurN ou valeurM break; default: // Code à exécuter si aucune des valeurs ne correspond break; // Optionnel si c'est la dernière instruction } -
Explication :
switchévalue uneexpression.- Il compare la valeur de cette
expressionà chaquecaseen utilisant une comparaison stricte (===). - Dès qu'une correspondance est trouvée, le code sous ce
caseest exécuté. - Le mot-clé
breakest crucial : il arrête l'exécution duswitchet sort de la structure. Sansbreak, l'exécution "tombe" sur les cas suivants (comportement appelé fall-through), ce qui est rarement souhaité. - Le bloc
defaultest facultatif et agit comme unelse, exécuté si aucuncasene correspond.
-
Exemple pratique : Déterminer le jour de la semaine
let jourNumero = 3; // 1 pour Lundi, 7 pour Dimanche let nomDuJour; switch (jourNumero) { case 1: nomDuJour = "Lundi"; break; case 2: nomDuJour = "Mardi"; break; case 3: nomDuJour = "Mercredi"; break; case 4: nomDuJour = "Jeudi"; break; case 5: nomDuJour = "Vendredi"; break; case 6: nomDuJour = "Samedi"; break; case 7: nomDuJour = "Dimanche"; break; default: nomDuJour = "Numéro de jour invalide"; break; } console.log(`Aujourd'hui, c'est ${nomDuJour}.`); // Affiche "Aujourd'hui, c'est Mercredi."- Explication du code :
- Le
switchévalue la variablejourNumero. - Lorsque
jourNumeroest3, il correspond aucase 3. La variablenomDuJourest définie à "Mercredi", puisbreakarrête leswitch. - Si
jourNumeroavait été0ou8, ledefaultaurait été exécuté.
- Le
- Explication du code :
1.4. L'opérateur Ternaire (? :)
C'est une forme abrégée d'une instruction if...else simple, très utile pour l'affectation conditionnelle de valeurs.
-
Syntaxe :
condition ? expressionSiVraie : expressionSiFausse; -
Exemple pratique : Déterminer le statut d'un étudiant
let note = 12; let statut = (note >= 10) ? "Réussi" : "Échoué"; console.log(`L'étudiant a ${note} et a donc ${statut}.`); // Affiche "L'étudiant a 12 et a donc Réussi." note = 8; statut = (note >= 10) ? "Réussi" : "Échoué"; console.log(`L'étudiant a ${note} et a donc ${statut}.`); // Affiche "L'étudiant a 8 et a donc Échoué."- Explication du code :
- L'expression
note >= 10est évaluée. - Si elle est
true, la valeur "Réussi" est assignée àstatut. - Si elle est
false, la valeur "Échoué" est assignée àstatut.
- L'expression
- Explication du code :
2. Les Boucles en JavaScript : Répéter des Tâches
Les boucles nous permettent d'exécuter un bloc de code plusieurs fois de suite, soit un nombre défini de fois, soit tant qu'une condition reste vraie. Elles sont indispensables pour traiter des listes de données, générer des éléments répétitifs ou attendre des événements.
2.1. La Boucle for
La boucle for est la plus courante pour répéter un bloc de code un nombre connu de fois.
-
Syntaxe :
for (initialisation; condition; incrémentation/décrémentation) { // Code à exécuter à chaque itération } -
Explication des composants :
initialisation: Exécutée une seule fois au début de la boucle. Typiquement, on y déclare et initialise une variable de compteur (ex:let i = 0;).condition: Évaluée avant chaque itération. Si elle esttrue, le bloc de code s'exécute. Si elle estfalse, la boucle s'arrête.incrémentation/décrémentation: Exécutée après chaque itération. Typiquement, on y met à jour la variable de compteur (ex:i++oui--).
-
Exemple pratique : Compter de 1 à 5
console.log("Début du compte..."); for (let i = 1; i <= 5; i++) { console.log(`Compteur : ${i}`); } console.log("Fin du compte !");- Explication du code :
let i = 1;: La variableiest initialisée à 1.i <= 5;: La boucle continue tant queiest inférieur ou égal à 5.i++: Après chaque exécution du bloc,iest incrémenté de 1.- Résultat : Les messages "Compteur : 1" à "Compteur : 5" seront affichés.
- Explication du code :
2.2. La Boucle while
La boucle while est utilisée lorsque le nombre d'itérations n'est pas connu à l'avance, et que la boucle doit continuer tant qu'une certaine condition reste vraie.
-
Syntaxe :
while (condition) { // Code à exécuter tant que la condition est vraie // Assurez-vous de modifier la condition à l'intérieur de la boucle // pour éviter une boucle infinie ! } -
Explication :
- La
conditionest évaluée avant chaque itération. - Si la condition est
true, le bloc de code est exécuté. - Si la condition devient
false, la boucle s'arrête. - Attention : Il est crucial que le code à l'intérieur de la boucle modifie la condition à un moment donné, sinon vous aurez une boucle infinie qui bloquera votre programme.
- La
-
Exemple pratique : Deviner un nombre aléatoire
let nombreCible = Math.floor(Math.random() * 5) + 1; // Un nombre entre 1 et 5 let tentative = 0; let trouve = false; console.log("Devinez le nombre entre 1 et 5 !"); while (!trouve) { tentative++; let proposition = Math.floor(Math.random() * 5) + 1; // L'ordinateur "devine" console.log(`Tentative #${tentative}: Proposition est ${proposition}`); if (proposition === nombreCible) { trouve = true; console.log(`Bravo ! Le nombre était ${nombreCible}. Trouvé en ${tentative} tentatives.`); } else { console.log("Ce n'est pas ça, réessayez."); } }- Explication du code :
- On génère un
nombreCiblealéatoire. - La boucle
whilecontinue tant quetrouveestfalse. - À chaque itération, une nouvelle
propositionest générée. - Si la
propositioncorrespond aunombreCible,trouvepasse àtrue, ce qui met fin à la boucle.
- On génère un
- Explication du code :
2.3. La Boucle do...while
La boucle do...while est similaire à while, mais elle garantit que le bloc de code est exécuté au moins une fois avant que la condition ne soit évaluée pour la première fois.
-
Syntaxe :
do { // Code à exécuter au moins une fois // ... puis tant que la condition est vraie } while (condition); -
Explication :
- Le bloc
doest exécuté d'abord. - Ensuite, la
conditionest évaluée. - Si la condition est
true, le blocdoest exécuté à nouveau. Ce processus se répète tant que la condition esttrue.
- Le bloc
-
Exemple pratique : Saisie utilisateur avec validation
let reponse; do { reponse = prompt("Voulez-vous continuer ? (oui/non)").toLowerCase(); } while (reponse !== "oui" && reponse !== "non"); if (reponse === "oui") { console.log("Vous avez choisi de continuer."); } else { console.log("Vous avez choisi d'arrêter."); }- Explication du code :
- Le
prompts'affiche toujours au moins une fois pour demander la réponse. - La boucle
do...whilecontinue de demander tant que lareponsen'est ni "oui" ni "non". - Une fois que l'utilisateur entre "oui" ou "non", la condition devient fausse et la boucle se termine.
- Le
- Explication du code :
2.4. Boucles spécifiques aux collections (for...of, for...in)
JavaScript offre des boucles plus spécifiques pour parcourir des collections de données.
-
for...of: Pour les itérables (tableaux, chaînes de caractères, Map, Set, etc.)let fruits = ["pomme", "banane", "orange"]; console.log("Liste des fruits :"); for (let fruit of fruits) { console.log(fruit); } let chaine = "Bonjour"; console.log("\nCaractères de la chaîne :"); for (let char of chaine) { console.log(char); }- Explication : Cette boucle itère directement sur les valeurs des éléments de la collection. C'est la méthode préférée pour parcourir les tableaux.
-
for...in: Pour les propriétés d'objets (à utiliser avec prudence)let personne = { nom: "Alice", age: 30, ville: "Paris" }; console.log("\nPropriétés de la personne :"); for (let cle in personne) { console.log(`${cle}: ${personne[cle]}`); }- Explication : Cette boucle itère sur les noms des propriétés (clés) énumérables d'un objet. Soyez prudent avec
for...incar elle peut aussi itérer sur des propriétés héritées et n'est pas recommandée pour les tableaux oùfor...ofouforEachsont plus appropriés.
- Explication : Cette boucle itère sur les noms des propriétés (clés) énumérables d'un objet. Soyez prudent avec
2.5. Mots-clés de Contrôle de Boucle
Deux mots-clés permettent de modifier le comportement des boucles :
-
break: Termine immédiatement la boucle en cours et passe à l'instruction qui la suit.for (let i = 0; i < 10; i++) { if (i === 5) { console.log("Trouvé 5, arrêt de la boucle."); break; // Sort de la boucle for } console.log(i); } // Le programme continue ici après le break console.log("Boucle terminée par break.");- Explication : Dès que
iatteint 5, le message s'affiche,breakest rencontré, et la bouclefors'arrête instantanément. Seuls 0, 1, 2, 3, 4 sont affichés avant lebreak.
- Explication : Dès que
-
continue: Arrête l'itération actuelle de la boucle et passe directement à l'itération suivante. Le code restant dans le bloc de la boucle pour l'itération actuelle n'est pas exécuté.for (let i = 0; i < 5; i++) { if (i % 2 === 0) { // Si i est pair console.log(`Saut de l'itération pour ${i} (pair).`); continue; // Passe à l'itération suivante } console.log(`Nombre impair : ${i}`); }- Explication : Pour chaque valeur paire de
i(0, 2, 4), le message de saut est affiché et lecontinueest exécuté, empêchant leconsole.logsuivant ("Nombre impair : ...") de s'exécuter pour cette itération. Seuls 1 et 3 sont affichés comme nombres impairs.
- Explication : Pour chaque valeur paire de
Conclusion et Résumé
Félicitations ! Vous avez maintenant exploré les piliers de la logique de programmation en JavaScript : les conditions et les boucles.
- Les conditions (
if/else if/else,switch, opérateur ternaire) vous donnent le pouvoir de prendre des décisions et de diriger le flux d'exécution de votre programme en fonction de l'évaluation de certaines expressions. - Les boucles (
for,while,do...while,for...of,for...in) vous permettent d'automatiser des tâches répétitives, rendant votre code plus concis, plus efficace et capable de gérer de grandes quantités de données. - Les mots-clés
breaketcontinueoffrent un contrôle fin sur le déroulement de vos boucles.
Ces concepts sont interdépendants et sont la clé pour écrire des applications JavaScript dynamiques et interactives. La maîtrise de ces outils est fondamentale pour résoudre des problèmes de programmation complexes.
N'oubliez pas que la meilleure façon d'assimiler ces concepts est de les pratiquer. Essayez de créer de petits scripts qui utilisent différentes structures conditionnelles et de boucles. Pensez à des scénarios de la vie réelle où vous auriez besoin de répéter des actions ou de prendre des décisions, et tentez de les modéliser en code. La prochaine étape sera d'apprendre à organiser ce code en fonctions, puis en modules, pour des applications de plus grande envergure. Continuez à coder !