Switch con valores no discretos

Problema:

Usar switch para bifurcar el código usando cualquier valor numérico, no solo enteros

En genral la estructura switch coge un valor o expresión y la compara con una serie de valroes concretos, cuando hay coincidencia ejecuta un código.

Es una forma de aclarar el código cuando hay muchos if anidados.

Pero a veces necesitamos ejecutar un código u toro con valores no discretos. Por ejemplo si un valor (no entero) está entre 0 y 3, entre 3 y 8 y entre 8 y 12 realizxar diferentes acciones.

Solución

Utilizar como expresión de control un valor booleano, true o false

Se puede usar switch pero invirtiendo el esquema: en lugar de comparar una expresión con un valor, se compara un valor booleano con expresiones booleanas. ¿Un poco raro?.

Es decir que como variable de control se toma un valor booleano y se va comparando con expresiones, la primera que cumpla la condición es la que ejecuta su código. El ejemplo te lo dejara claro.

Ejemplo

Se trata e convertir en texto los resultados de un examen: menos de 3 será muy mal, entre 3 y 5 es mejorable, entre 5 y 7 sería aprobado, entre 7 y 9 sería notable y de 9 a 10 sería sobresaleinte. Por ejemplo un 5.25 es aprobado.

let nota;

nota = parseFloat(prompt("Nota?")

switch (true){

   case (nota>0 && nota <3):

       calificacion : "Muy Mal"

       break;

   case (nota>=3 && nota <5):

       calificacion : "Mal"

   case (nota>=5 && nota <7):

       calificacion : "Aprobado"

       break;

   case (nota>=7 && nota <9):

       calificacion : "Notable"

       break;

   case (nota>=9 && nota <=10):

       calificacion : "Sobresaliente"

  default:

       calificacion = "indefinido"

}

console.log(calificacion);

Como ves lo que se compara es el valor true con cada expresión de case. La expresión que sea true será la que ejecutará su código.