Is there a way to write a conditional switch statement in javascript?
I\'m guessing not, since the following is always going to default:
var raw
Like this:
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;
}
The expressions in the case statements will evaluate to true or false, and if that matches the switch condition... voilà. The default acts like an else.
Bonus: you can invert the whole logic by simply replacing true with false. With if ... else if statements, you'd have to edit every if-clause individually.
In a switch statement, the evaluated value of the switch expression is compared the the evaluated values of the cases. So here the value of raw_value (number) is compared to raw_value > 10.0 (comparison expression) and raw_value > 5.0 (comparison expression).
So unless one of your case expressions yield a number equal to 11.0 or you use the switch expression true, you will always get the default case.
Just use a simple if/else instead:
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;
}
No, the switch statement does not work used like that. However, this statement is not always simpler. For example, the switch version takes 15 lines:
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;
}
and the "long" if/else version only 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;
}
So in your case, it is better to use the second one than the first...
Don't try this at home, or take it too seriously, this is just for sugary fun...
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