58 votes

Expression à l'intérieur de l'instruction switch case

J'essaie de créer une instruction switch mais je n'arrive pas à utiliser une expression qui est évaluée (plutôt qu'un ensemble chaîne/entier). Je peux facilement le faire avec les instructions if, mais le cas devrait, espérons-le, être plus rapide.

j'essaye ce qui suit

 function reward(amount) {
    var $reward = $("#reward");
    switch (amount) {
        case (amount >= 7500 && amount < 10000):
            $reward.text("Play Station 3");
            break;
        case (amount >= 10000 && amount < 15000):
            $reward.text("XBOX 360");
            break;
        case (amount >= 15000):
            $reward.text("iMac");
            break;
        default:
            $reward.text("No reward");
            break;
    }
}

Est-ce que j'ai raté quelque chose d'évident ou n'est-ce pas possible ? Google n'a pas été amical dans ce cas.

Toute aide/pointeurs appréciés

M

163voto

MooGoo Points 11094

Tu pourrais toujours faire

 switch (true) {
  case (amount >= 7500 && amount < 10000):
    //code
    break;
  case (amount >= 10000 && amount < 15000):
    //code
    break;

  //etc...

Cela fonctionne parce que true est une constante, donc le code sous la première instruction case avec une expression évaluée à true sera exécuté.

C'est un peu "difficile" je suppose, mais je ne vois rien de mal à l'utiliser. Une simple if/else serait probablement plus concise, et vous n'auriez pas à vous soucier des chutes accidentelles. Mais voilà quand même.

2voto

robert Points 374

Vous pouvez également essayer l'une de mes constructions préférées :

 function reward(amount) {
    var $reward = $("#reward");
    $reward.text(
        (amount >= 7500 && amount < 10000) ?    "Play Station 3" :
        (amount >= 10000 && amount < 15000)?    "XBOX 360" :
        (amount >= 15000) ?                     "iMac" :
                                                "No reward"
    );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X