Avec une boucle while, on peut exécuter du code de manière répétée tant qu'une certaine condition est remplie.
Elle s'écrit avec le mot-clé while, suivi d'une condition entre parenthèses, et d'un bloc de code contenant le corps de la boucle entre accolades.
while (condition) {
// code that is executed repeatedly as long as the condition is true
}
JavaScript dispose aussi d'une boucle do-while. Ici, la condition est vérifiée après l'exécution du corps de la boucle. C'est utile lorsque la condition dépend d'évaluations effectuées dans le corps.
do {
// The code here will always be executed once and then
// repeatedly while the condition is true.
} while (condition);
À l'intérieur du corps d'une boucle, on peut utiliser le mot-clé break pour arrêter complètement l'exécution de la boucle.
En revanche, le mot-clé continue arrête seulement l'exécution de l'itération en cours et passe à la suivante.
Avec continue, on peut souvent éviter d'envelopper de grandes parties du corps de la boucle dans une instruction if.
let i = 0;
while (i < 100) {
i = i + 2;
if (i % 3 === 0) {
continue;
}
// The code here will only be executed when i was not divisible
// by 3 in the check above.
}
Outre l'instruction if, JavaScript dispose aussi d'une instruction switch pour exécuter conditionnellement de la logique.
Elle est utilisée lorsqu'une seule variable doit être comparée à plusieurs variantes.
La comparaison est effectuée en vérifiant l'égalité stricte (===), voir concept de comparaison.
Pour une variable x donnée, l'instruction switch en JavaScript a la syntaxe suivante :
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the options
}
Le cas default est facultatif et s'utilise si l'on veut exécuter du code lorsque aucune des autres options ne correspond à la variable.
Les instructions break ci-dessus sont nécessaires car, par défaut, tous les cas sont « fallthrough » en JavaScript.
Cela signifie que, sans instruction break, tout le code des cas situés sous la première option correspondante serait exécuté même si x ne correspondait pas à ces options.
Ce comportement de « fallthrough par défaut » est un piège courant lorsqu'on utilise switch en JavaScript.
À l'intérieur d'une fonction, on peut aussi utiliser return à la place de break pour éviter ce problème.
Ton amie Li Mei tient un bar à jus où elle vend de délicieux jus de fruits mélangés. Tu es un client régulier de sa boutique et tu t'es rendu compte que tu pouvais lui faciliter la vie. Tu décides d'utiliser tes compétences en programmation pour aider Li Mei dans son travail.
Li Mei aime dire à ses clients à l'avance combien de temps ils devront attendre pour le jus du menu qu'ils ont commandé.
Elle a du mal à retenir les chiffres exacts, car le temps de préparation des jus varie.
'Pure Strawberry Joy' prend 0,5 minute, 'Energizer' et 'Green Garden' prennent 1,5 minute chacun, 'Tropical Island' prend 3 minutes et 'All or Nothing' prend 5 minutes.
Pour toutes les autres boissons (par exemple, les offres spéciales), tu peux considérer que le temps de préparation est de 2,5 minutes.
Pour aider ton amie, écris une fonction timeToMixJuice qui prend en argument un jus du menu et renvoie le nombre de minutes nécessaires pour préparer cette boisson.
timeToMixJuice('Tropical Island');
// => 3
timeToMixJuice('Berries & Lime');
// => 2.5
Beaucoup des créations de Li Mei contiennent des quartiers de citron vert, que ce soit comme ingrédient ou comme décoration. Donc, quand elle commence son service le matin, elle doit s'assurer que le bac de quartiers de citron vert est plein pour la journée à venir.
Implémente la fonction limesToCut qui prend le nombre de quartiers de citron vert que Li Mei doit découper et un tableau représentant la réserve de citrons verts entiers dont elle dispose.
Elle peut obtenir 6 quartiers d'un citron vert 'small', 8 quartiers d'un citron vert 'medium' et 10 d'un citron vert 'large'.
Elle découpe toujours les citrons verts dans l'ordre dans lequel ils apparaissent dans la liste, en commençant par le premier élément.
Elle continue jusqu'à atteindre le nombre de quartiers dont elle a besoin ou jusqu'à ne plus avoir de citrons verts.
Li Mei aimerait savoir à l'avance combien de citrons verts elle doit découper.
La fonction limesToCut doit renvoyer le nombre de citrons verts à découper.
limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4
Li Mei travaille toujours jusqu'à 15 h. Ensuite, son employé Dmitry prend le relais. Il y a souvent des boissons qui ont été commandées mais pas encore préparées lorsque le service de Li Mei se termine. Dmitry prépare alors les jus restants.
Pour faciliter la transition, implémente une fonction remainingOrders qui prend le nombre de minutes restantes dans le service de Li Mei et un tableau de jus qui ont été commandés mais pas encore préparés.
La fonction doit renvoyer les commandes que Li Mei ne peut pas commencer à préparer avant la fin de sa journée de travail.
Le temps restant dans le service sera toujours supérieur à 0. Le tableau de jus à préparer ne sera jamais vide. De plus, les commandes sont préparées dans l'ordre dans lequel elles apparaissent dans le tableau. Si Li Mei commence à préparer un certain jus, elle le termine toujours, même si elle doit travailler un peu plus longtemps. S'il ne reste aucune commande dont Dmitry doit s'occuper, un tableau vide doit être renvoyé.
remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Inscris-toi sur Exercism pour apprendre et maîtriser JavaScript avec 37 concepts159 exercices, et un vrai mentorat humain, le tout gratuitement.