funciones - javascript ejemplos pdf
Declaración de cambio condicional de Javascript (4)
¿Hay alguna manera de escribir una instrucción de cambio condicional en javascript?
Supongo que no, ya que lo siguiente siempre va a ser el predeterminado:
var raw_value = 11.0;
switch(raw_value)
{
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
Si no, ¿qué debería usar en su lugar, una declaración larga if / else?
Gracias :)
En una declaración de switch , el valor evaluado de la expresión de switch se compara con los valores evaluados de los casos. Así que aquí el valor de raw_value (number) se compara con raw_value > 10.0 (expresión de comparación) y raw_value > 5.0 (expresión de comparación).
Entonces, a menos que una de las expresiones de su caso arroje un número igual a 11.0 o use la expresión de switch true , siempre obtendrá el caso predeterminado.
Simplemente use un if / else simple en if lugar:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
Me gusta esto:
var raw_value = 11.0;
switch(true) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
}
Las expresiones en los enunciados de case se evaluarán como true o false , y si eso coincide con la condición del switch ... voilà. El default actúa como un else .
Bonificación: puede invertir toda la lógica simplemente reemplazando true con false . Con las sentencias if ... else if , tendrías que editar cada cláusula if de forma individual.
No intentes esto en casa, o tómalo demasiado en serio, esto es solo para diversión azucarada ...
function conditionalSwitch(value, cond, callback /* cond, callback, cond, callback, ... */ ) {
for (var i = 1; i < arguments.length; i += 2) {
if (arguments[i](value)) {
arguments[i + 1](value);
return;
}
}
}
function test(val) {
let width, height;
conditionalSwitch(val,
(val) => val > 10,
() => [height, width] = [48,36],
(val) => val > 5,
() => [height, width] = [40, 30],
// Default
() => true,
() => [height, width] = [16, 12]
)
console.log(width, height);
}
test(4.9); // 12 16
test(5.1); // 30 40
test(10.1); // 36 48
No, la instrucción switch no funciona así. Sin embargo, esta afirmación no siempre es más simple. Por ejemplo, la versión del switch toma 15 líneas:
var raw_value = 11.0;
switch(raw_value) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
y la versión "larga" if/else solo 11:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
Entonces, en tu caso, es mejor usar el segundo que el primero ...