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 ...