58 votes

Comment obtenir la valeur de retour d'une instruction switch ?

Dans la console de chrome, quand je tape :

> switch(3){default:"OK"}
  "OK"

Il semble donc que l'instruction switch ait une valeur de retour. Mais quand je le fais :

> var a = switch(3){default:"OK"}

Il y a une erreur de syntaxe "Unexpected Token switch".

Est-il possible de capturer l'instruction de retour du commutateur ?

65voto

helloandre Points 5784

C'est parce que lorsque vous mettez ça dans la console Chrome, vous la court-circuitez. Il imprime juste 'OK' parce qu'il atteint le cas par défaut, et non pas en fait renvoyer quelque chose.

Si vous voulez que quelque chose soit retourné, mettez-le dans une fonction, et retournez le 'OK' dans le cas par défaut.

function switchResult(a){
    switch(a){
        default: 
            return "OK";
    }
}

var a = switchResult(3);

47voto

zarvax Points 181

ES6 vous permet de le faire en utilisant une lambda invoquée immédiatement :

const a = (() => {
  switch(3) {
    default: return "OK";
  }
})();

33voto

gaby de wilde Points 41

Il est peut-être intéressant de noter que vous n'avez pas besoin de l'encombrement de ;break; si vous l'intégrez dans une fonction. (comme décrit par heloandre)

function switchResult(a){   
    switch(a){   
        case 1: return "FOO";
        case 2: return "BAR";
        case 3: return "FOOBAR";
        default: return "OK";      
    }
}
var a = switchResult(3);

1voto

NickersF Points 41

J'ai récemment dû tester si les instructions switch peuvent renvoyer des valeurs. J'étais presque sûr que c'était le cas et j'ai implémenté une fonction rapide et laconique pour le tester dans la console FF et Chrome.

function switchController(setFlag) {
  switch (setFlag) {
    case true:   return setFlag;
    case false:  return setFlag;
  }
}

console.log(switchController(true));
console.log(switchController(false));

Vous devriez obtenir la sortie suivante dans la console :

true
false

Vous pouvez afficher les valeurs de retour en utilisant console.log()

1voto

Guffa Points 308133

Non, le switch n'a pas de valeur de retour. Ce que vous voyez dans la console est la valeur de retour de l'instruction à l'intérieur de l'objet switch contenant uniquement une valeur littérale de type chaîne.

Une instruction peut avoir une valeur de retour. Une affectation, par exemple, a pour valeur de retour la valeur affectée, et la post-incrémentation d'une valeur renvoie le résultat après incrémentation :

> a = 42;
42
> a++;
43

Une instruction ne contenant qu'une valeur aura cette valeur comme valeur de retour :

> 42;
42
> "OK";
"OK"

Une telle instruction n'est cependant utile que dans la console, par exemple pour afficher la valeur d'une variable. Dans le code, elle ne sert à rien.

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