El condicional switch es una instrucción que permite evaluar una expresión y ejecutar diferentes bloques de código, dependiendo de su valor. Es muy útil cuando se puede tener múltiples valores posibles porque el código queda bien organizado, lo que lo hace más legible y fácil de mantener que en otras estructuras.
Como alternativa, existe el condicional if…else con una serie de instrucciones else if o múltiples if anidados. Sin embargo, la instrucción switch ofrece una sintaxis mucho más limpia: en vez de crear múltiples condiciones, las agrupa en un solo bloque, facilitando la identificación de cada caso.
Algoritmo
Su funcionamiento es simple: primero se evalúa la expresión y, si coincide con el valor de una de las etiquetas de caso, se ejecuta el bloque de código asociado con dicho caso. Si ninguna de las etiquetas coincide con el valor de la expresión, se ejecuta el bloque de código asociado con el caso por defecto.
Cada vez que se ejecuta el programa se evalúa la expresión. Si coincide con el caso 1, se ejecuta el código de su bloque asociado y ya no comprueba los demás casos. Pero si no coincide con el primero, comprueba el segundo, y así sucesivamente hasta llegar al último. Puede haber tantos casos como sean necesarios. Si no coincide con ningún caso, se ejecuta el código del caso por defecto.
Sintaxis
La palabra reservada switch marca el inicio de esta estructura condicional. Después, entre paréntesis (()) se indica la expresión para evaluar, que se comparará con los diferentes casos establecidos. Entre las llaves ({}) se introducen todos los casos, incluyendo el caso por defecto.
Su sintaxis es la siguiente:
switch (expresión) {
case 1:
// Código que se ejecuta
// si el valor es 1
break;
case 2:
// Código que se ejecuta
// si el valor es 2
break;
case 3:
// Código que se ejecuta
// si el valor es 3
break;
default:
// Código que se ejecuta
// si no es ninguno de
// los anteriores
}
La expresión indicada entre paréntesis puede ser una variable, una expresión matemática, el resultado de una función, una expresión lógica, un tipo de dato, etc. En resumen: es cualquier expresión evaluable que devuelve un valor.
Mediante la palabra reservada case se indica el valor a comparar con la expresión. Dicho valor puede ser un número, una cadena de texto o un valor booleano, aunque no tendría sentido crear un switch solo para dos ramificaciones.
La palabra default es opcional y permite introducir el bloque de código por defecto o predeterminado. Este código se ejecutará en caso de que ninguno de los casos anteriores coincide con el valor de la expresión.
Ejemplo 1
Una de las formas más comunes de utilizar el condicional switch es cuando se quiere ejecutar diferentes acciones según el valor de una variable concreta. Por ejemplo si tenemos una variable que representa un número que va del 1 al 7, podemos asociar cada número con un día de la semana.
let dia = 3;
switch (dia) {
case 1:
console.log("Lunes");
break;
case 2:
console.log("Martes");
break;
case 3:
console.log("Miércoles");
break;
case 4:
console.log("Jueves");
break;
case 5:
console.log("Viernes");
break;
case 6:
console.log("Sábado");
break;
case 7:
console.log("Domingo");
break;
default:
console.log("Número de día no válido");
}
Lo primero que hace el switch es evaluar el valor de la variable dia. El programa recorre los distintos casos (de 1 a 7) hasta que encuentra una coincidencia exacta con el valor almacenado en la variable, y mostrará el mensaje correspondiente. Por tanto, si la variable dia vale 3, el programa mostrará «Miércoles».
Cada bloque finaliza con la instrucción break, lo que indica que el programa debe salir del switch una vez haya encontrado y ejecutado el caso correcto. Si se omitiera el break, el flujo continuaría ejecutando los siguientes casos, provocando resultados no deseados. Este fenómeno se conoce como «fall through».
Si el valor de la variable fuese distinto de los casos esperados, se ejecutaría el bloque del default, actuando así como una especie de plan alternativo. Así se puede tomar decisiones cuando hay valores fuera del rango de 1 a 7.
Ejemplo 2
Para profundizar más en el funcionamiento del condicional switch, podemos crear un ejemplo más complejo: analizar una nota de examen y mostrar su calificación textual (suspendido, aprobado, notable o sobresaliente). Para simplificarlo un poco, pondremos la nota del estudiante en la variable nota.
let nota = 7;
switch (true) {
case (nota < 5):
console.log('Suspendido');
break;
case (nota < 7):
console.log('Aprobado');
break;
case (nota < 9):
console.log('Notable');
break;
default:
console.log('Excelente');
}
En este ejemplo, la instrucción switch evalúa la expresión true. Aunque puede parecer extraño, es una técnica común cuando se quiere que los casos contengan condiciones lógicas en lugar de valores exactos. Así, cada case es comprobado de forma secuencial hasta que una de las expresiones devuelve true. En este punto se ejecutará el bloque correspondiente.
Como en el ejemplo anterior, si no se incluyera el break, la ejecución continuaría hacia el siguiente bloque, ejecutando también los demás casos. Esta “caída” o «fall through» puede ser útil en ciertos casos, pero normalmente se evita.