El condicional SWITCH permite evaluar una expresión y ejecutar diferentes bloques de código en función del valor de dicha expresión.
Rs una estructura de control que ofrece una alternativa al condicional IF-ELSE para tomar decisiones basadas en múltiples casos.
Dicho en lenguaje natural, significa
En función de lo que valga ‘esto’, haz una de estas cosas…
De forma general, su sintaxis es la siguiente,
switch(expresion):
case valor1:
// código a ejecutar si la expresion es igual a valor1
break;
case valor2:
// código a ejecutar si la expresion es igual a valor2
break;
case valor3:
// código a ejecutar si la expresion es igual a valor3
break;
default:
// código a ejecutar si la expresion no coincide con ninguno de los casos anteriores
En el caso de un condicional SWITCH en lugar de una condición se emplea una expresión que proporciona un valor (por ejemplo, puede ser un número, o un texto).
Durante la ejecución la expresión evalúa, y su valor se compara con cada uno de los posibles casos definidos. Si hay una coincidencia, se ejecuta el bloque de código correspondiente a ese caso.
El último caso default
es opcional, y se ejecuta cuando la expresión no coincide con ninguno de los casos que hemos definido anteriormente.
También habéis notado el uso de la instrucción break
después de cada bloque de código, para salir del condicional y evitar la ejecución de otros casos.
En algunos lenguajes este break
no es obligatorio, y permite la ejecución de más de un bloque en caso de coincidencia. Esto se llamaba ‘fallthrough’ y generaba código difícil y propenso a fallos.
En la actualidad el ‘fallthrough’ la actualidad se considera una práctica desaconsejada. Tanto, que muchos lenguajes prohíben su uso, y obligan a poner siempre el break
.
Comparación con IF-ELSE
El código que he mostrado anteriormente es equivalente a el siguiente bloque IF-ELSE.
if (expresion == valor1)
{
// código a ejecutar si la expresion es igual a valor1
}
else if (expresion == valor2)
{
// código a ejecutar si la expresion es igual a valor2
}
else if (expresion == valor3)
{
// código a ejecutar si la expresion es igual a valor3
}
else
{
// código a ejecutar si la expresion no coincide con ninguno de los casos anteriores
}
En general, no es mucho más largo que el condicional SWITCH. En buena parte, por que la obligatoriedad de tener que poner el break hace que el SWITCH sea innecesariamente largo
Ejemplos de condicional SWITCH en distintos lenguajes
Vamos a ver ejemplos de uso del condicional SWITCH en diferentes lenguajes de programación:
Por ejemplo, en C++, Java, C# y JavaScript, el código sería el siguiente,
int diaSemana = 3;
switch (diaSemana)
{
case 1:
// acciones a realizar si es Lunes
break;
case 2:
// acciones a realizar si es Martes
break;
case 3:
// acciones a realizar si es Miercoles
break;
case 4:
// acciones a realizar si es Jueves
break;
case 5:
// acciones a realizar si es Viernes
break;
default:
// acciones a realizar si es Fin de semana
break;
}
Por ejemplo, en el caso de Python, a partir de la versión 3.10 incorpora una estructura SWITCH, pero en este caso se emplea la palabra reservada match
.
match diaSemana:
case 1:
print("Lunes")
case 2:
print("Martes")
case 3:
print("Miércoles")
case 4:
print("Jueves")
case 5:
print("Viernes")
case _:
print("Fin de semana")
No obstante no todos los lenguajes tienen un condicional SWITCH. De hecho, como he dicho, Python antes de la versión 3.10 no disponía de esta estructura. En los lenguajes que no disponen de él, deberá realizarse mediante el código equivalente IF-ELSEIF.
Uso junto a enumeraciones
En muchas ocasiones los condicionales SWITCH se emplean junto a enumeraciones, lo que permite mejorar mucho su legibilidad. Por ejemplo, el código anterior quedaría así,
enum DiaSemana
{
Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo
}
var dia = DiaSemana.Miercoles;
switch (dia)
{
case DiaSemana.Lunes:
// Acciones a realizar si es Lunes
break;
case DiaSemana.Martes:
// Acciones a realizar si es Martes
break;
case DiaSemana.Miercoles:
// Acciones a realizar si es Miercoles
break;
case DiaSemana.Jueves:
// Acciones a realizar si es Jueves
break;
case DiaSemana.Viernes:
// Acciones a realizar si es Viernes
break;
default:
// Acciones a realizar si es Fin de semana
break;
}
Un condicional polémico Consejos
El uso del condicional SWITCH ha generado cierta polémica y debate entre los desarrolladores. Existe una opinión que considera que no es necesario. Incluso hemos visto que lenguajes de programación modernos han optado por no incluirlo en su sintaxis.
En general, se considera una práctica algo anticuada. Para ciertos desarrolladores, el bloque equivalente en IF-ELSEIF es más legible. Además de más potente, ya que no tiene restricciones en cuanto a los condicionales a usar.
Por contra, hay otros desarrolladores que opinan que el condicional SWITCH ofrece una sintaxis más compacta y legible en casos donde se necesitan realizar múltiples comparaciones con una única variable
Además, el uso adecuado del condicional SWITCH puede mejorar el rendimiento del programa en comparación con estructuras IF-ELSEIF. Esto se debe a que realiza una evaluación directa de los casos, evitando la necesidad de evaluar múltiples condiciones en cascada.
Bueno, supongo que para gustos los colores. Realmente no es un condicional que no es tan útil como parece, y actualmente está en desuso. Aunque, por otro lado, esta recobrando un nuevo auge gracias al pattern matching.
En cualquier caso, ahí lo tenéis explicado. Muchos lenguajes lo implementan, por lo que es interesante que, al menos, sepáis de su existencia y sepáis usarlo.