Condicional switch
La sentencia switch permite evaluar una expresión contra múltiples casos posibles, ofreciendo una alternativa más legible que múltiples if-else cuando comparas un mismo valor contra varias opciones.
TL;DR - Resumen rápido
- switch evalúa una expresión contra múltiples casos (case)
- break detiene la ejecución y evita el fall-through
- default ejecuta código cuando ningún case coincide
- Múltiples cases pueden compartir el mismo bloque de código
- switch usa comparación estricta (===) para evaluar casos
- Es más legible que if-else cuando comparas un valor contra muchas opciones
- El fall-through puede ser útil pero también una fuente de bugs
¿Qué es switch?
La sentencia switch es una estructura de control que evalúa una expresión y ejecuta el bloque de código correspondiente al caso (case) que coincida. Es especialmente útil cuando necesitas comparar una misma variable o expresión contra múltiples valores posibles.
A diferencia de if-else, switch hace el código más legible cuando tienes muchas comparaciones de igualdad contra el mismo valor. En lugar de escribir if (dia === "lunes") {} else if (dia === "martes") {} repetidamente, switch lo estructura de forma más clara.
Sintaxis básica
La estructura básica de switch consiste en la palabra clave switch, la expresión a evaluar entre paréntesis, y múltiples bloques case que representan los valores posibles. Cada case termina con break para evitar que se ejecuten los casos siguientes.
En este ejemplo, switch evalúa la variable dia. Cuando encuentra un case que coincide (usando comparación estricta ===), ejecuta el código de ese bloque. El break al final de cada caso detiene la ejecución y sale del switch. Sin break, JavaScript continuaría ejecutando los casos siguientes, un comportamiento llamado "fall-through".
Break y fall-through
El break es crucial en switch porque detiene la ejecución y previene que se ejecuten los casos siguientes. Sin break, JavaScript ejecuta todos los casos después del que coincide hasta encontrar un break o llegar al final del switch, un comportamiento llamado "fall-through".
El ejemplo muestra dos casos: sin break, después de ejecutar el código de case 2, JavaScript continúa ejecutando case 3 y default hasta salir del switch. Con break, se detiene inmediatamente después del caso que coincide. El fall-through puede ser útil en ciertos casos, pero generalmente es una fuente de bugs y debe evitarse salvo que sea intencional.
Siempre usa break
Omitir break causa fall-through: el código ejecuta todos los casos siguientes hasta encontrar un break. Esto raramente es intencional y suele ser un bug difícil de detectar.
Múltiples cases para un mismo bloque
Cuando varios valores deben ejecutar el mismo código, puedes apilar múltiples case sin código entre ellos. Esto aprovecha el fall-through de forma intencional y evita duplicar código para valores que requieren la misma acción.
Al apilar case sin break entre ellos, todos esos valores ejecutan el mismo bloque de código. En el ejemplo, tanto "sábado" como "domingo" ejecutan el código de fin de semana. Esto es más limpio que usar operadores lógicos (||) en un if cuando tienes muchos valores agrupados.
El case default
El default es opcional y se ejecuta cuando ningún case coincide con la expresión evaluada. Funciona como el else en una cadena if-else, manejando todos los casos no especificados explícitamente.
El default puede colocarse en cualquier posición del switch, pero convencionalmente se pone al final. No requiere break si está al final, pero es buena práctica incluirlo por consistencia. Úsalo para manejar valores inesperados o proporcionar un comportamiento por defecto cuando ninguna opción específica aplica.
Default para valores inesperados
Usa default para validar entrada y manejar casos no previstos. Es una buena práctica incluirlo incluso si crees que has cubierto todos los casos posibles.
switch vs if-else
Tanto switch como if-else permiten ejecutar código condicionalmente, pero cada uno tiene casos de uso donde brilla. Entender cuándo usar cada uno mejora la legibilidad y mantenibilidad de tu código.
Usa switch cuando compares un valor contra múltiples opciones discretas (igualdad estricta). Usa if-else cuando necesites condiciones complejas, rangos, operadores de comparación (>, <), o lógica booleana. El ejemplo muestra que switch es más claro para casos múltiples de igualdad, mientras if-else es necesario para comparaciones de rango.
Elige según el caso de uso
Usa switch para comparaciones de igualdad múltiples contra un mismo valor. Usa if-else para condiciones complejas, rangos o lógica booleana.
Comparación estricta en switch
El switch usa comparación estricta (===) para evaluar cada caso, lo que significa que tanto el valor como el tipo deben coincidir. Esto puede causar comportamientos inesperados si no tienes cuidado con los tipos de datos.
A diferencia de if con ==, switch no hace coerción de tipos. En el ejemplo, valor = "2" (string) no coincide con case 2 (number) porque son tipos diferentes. Esto previene bugs sutiles de coerción, pero requiere que seas explícito con tus tipos. Si recibes strings de un formulario, conviértelos primero con Number() o parseInt().
Ten cuidado con los tipos
switch usa ===, no ==. El string "2" no coincidirá con el number 2. Convierte tipos explícitamente si es necesario.
Casos prácticos
Veamos ejemplos reales de cómo usar switch en situaciones comunes de desarrollo, desde manejo de comandos hasta cálculo de valores basados en opciones.
Los casos prácticos muestran tres aplicaciones reales: obtener días en un mes (usando cases múltiples para meses con la misma cantidad de días), procesar comandos de usuario con valores de retorno directos, y mapear valores de estado a descripciones. Cada caso aprovecha las fortalezas de switch: comparaciones múltiples de igualdad contra un mismo valor con código claro y estructurado.
Resumen
Resumen: Condicional switch
Conceptos principales:
- •switch evalúa una expresión contra múltiples cases
- •break detiene la ejecución y previene fall-through
- •default maneja casos no especificados (como else)
- •Múltiples cases pueden compartir el mismo código
- •Usa comparación estricta (===) sin coerción de tipos
Mejores prácticas:
- •Usa switch para múltiples comparaciones de igualdad
- •Siempre incluye break salvo fall-through intencional
- •Agrega default para manejar valores inesperados
- •Prefiere if-else para rangos o condiciones complejas
- •Ten cuidado con tipos: string '2' ≠ number 2