lenguaje - ¿JavaScript tiene una forma de expresión de cambio?
manual javascript pdf 2017 (4)
Al obtener un valor de forma condicional, me gusta usar el operador ternario ( ?:
:) Para que pueda tener declaraciones de variables const
:
// Better
const foo = x ? ''bar'' : ''goo'';
// Worse
var foo;
if (x) {
foo = ''bar'';
} else {
foo = ''goo'';
}
Me gustaría hacer lo mismo para las declaraciones de switch
. Puedo usar una serie de anidados ?:
, Pero esto es bastante engorroso y no escala bien:
const foo = x === 1 ? ''bar'' : (x === 2 ? ''goo'' : ''zoo'');
Incluso podría usar un cierre, pero esto también es detallado:
const foo = (() => {
switch(x) {
case 1:
return ''bar'';
case 2:
return ''goo'';
default:
return ''zoo'';
}
})();
¿Hay una expresión de switch
en JavaScript?
TL; DR: No hay tal expresión
El ternario es posible
La forma en que has hecho es con el ternario sería el enfoque correcto en este caso. Pero como pueden ver, de hecho no escala bien.
Pero usar una función parece mejor
Una solución sería usar una función que le devuelva un valor.
function getSomething(input)
{
if(input == 1)
// return for case 1
if(input == 2)
// return for case 2
...
}
Cuando no es demasiado largo me gusta usar ||
y &&
para este propósito.
const foo = (x === 1 && ''bar'') || (x === 2 && ''goo'') || ''zoo''
En primer lugar, debe mantener las cosas legibles y manejables. Apretar dos o tres condiciones con cuatro o cinco valores en una línea es ilegible casi de cualquier forma que lo gires.
Sugeriría este enfoque muy declarativo:
let fooToBarMap = {
foo: ''bar'',
baz: 42
};
let y = fooToBarMap[x] || ''default'';
No. La expresión lógicamente equivalente sería un operador ternario anidado, como lo ha enumerado, o una construcción similarmente manejable de operandos booleanos.