J'essaie d'écrire une instruction switch mais cela ne semble pas fonctionner comme je le veux.
getExerciseDescription(exerciseId, intensity_level){
alert(exerciseId + " " + intensity_level)
switch (exerciseId && intensity_level) {
case (1 && 1):
this.header="Exercise 1 Level 1";
this.instructions="Exercise 1 Level 1";
break;
case (1 && 2):
this.header="Exercise 1 Level 2";
this.instructions="Exercise 1 Level 2";
break;
case (2 && 1):
this.header="Exercise 2 Level 1";
this.instructions="Exercise 2 Level 1";
break;
case (2 && 2):
this.header="Exercise 2 Level 2";
this.instructions="Exercise 2 Level 2";
break;
default:
this.header="Default";
this.instructions="Default";
break;
}
return new Popup(this.header, this.instructions);
}
Les alertes donnent 2 et 1 mais la valeur renvoyée est pour (1 && 1). Pourquoi est-ce? Comment puis-je réparer cela?
Vous ne pouvez tout simplement pas utiliser une switch
comme ça. (1 && 1) == (2 && 1) == 1
et (1 && 2) == (2 && 2) == 2
, vous faites donc l'équivalent de:
getExerciseDescription(exerciseId, intensity_level){
alert(exerciseId + " " + intensity_level)
switch (exerciseId && intensity_level) {
case (1):
this.header="Exercise 1 Level 1";
this.instructions="Exercise 1 Level 1";
break;
case (2):
this.header="Exercise 1 Level 2";
this.instructions="Exercise 1 Level 2";
break;
case (1):
this.header="Exercise 2 Level 1";
this.instructions="Exercise 2 Level 1";
break;
case (2):
this.header="Exercise 2 Level 2";
this.instructions="Exercise 2 Level 2";
break;
default:
this.header="Default";
this.instructions="Default";
break;
}
return new Popup(this.header, this.instructions);
}
Alors bien sûr, les deux cas inférieurs ne seront jamais exécutés. Il vaut mieux utiliser uniquement les instructions if
et else if
, ou peut-être des commutateurs imbriqués si vous le souhaitez.
Vous pouvez aussi faire quelque chose comme:
switch (exerciseId + " " + intensity_level) {
case("1 1"): ...
case("1 2"): ...
case("2 1"): ...
case("2 2"): ...
Ce n’est pas ainsi qu’une déclaration switch
sera évaluée. Pour votre scénario, il sera toujours évalué au 2e entier de la logique et à &&
.
(Plus d'informations sur Opérateurs logiques )
ET logique (&&)
expr1 && expr2
Retourne expr1 s'il peut être converti en false; sinon, renvoie expr2. Ainsi, lorsqu'il est utilisé avec des valeurs booléennes, && renvoie true si les deux opérandes sont vrais; sinon, renvoie false.
En fait, vous n'avez même pas besoin d'utiliser un commutateur, vous pouvez l'écrire avec un simple if
if (exerciseId <= 2 && intensity_level <= 2){
this.header=`Exercise ${exerciseId} Level ${intensity_level}`;
this.instructions=`Exercise ${exerciseId} Level ${intensity_level}`;
} else {
this.header="Default";
this.instructions="Default";
}
Les opérateurs logiques &&
, ||
et !
renvoient toujours true
ou false
, de sorte que les cas de commutation possibles sont uniquement vrais et faux. Vous ne devriez utiliser que des chaînes ou des nombres.