Al igual que las sentencias if, que dan a tu programa la capacidad de tomar decisiones, las sentencias switch pueden utilizarse para infundir un poco de inteligencia a cualquier programa. De hecho, una sentencia switch es esencialmente una versión especializada de una sentencia if que, de otro modo, tendría una cantidad excesiva de sentencias de tipo ELSE IF
.
Veamos por qué se utilizan.
A veces, al infundir lógica en tus programas te encontrarás con una situación en la que, dado el valor de un determinado dato, querrás hacer algo diferente. Normalmente esto se podría cubrir con una sentencia if, pero ¿qué pasa si quieres tener en cuenta 5, 10 , incluso 20 situaciones posibles?
Usando una sentencia if, tu programa pronto se convertiría en un lío de sintaxis de sentencias if, y no sería muy legible o claro lo que está pasando. Los programadores se dieron cuenta de esto y así nacieron las sentencias switch.
Estructura de las sentencias switch
Una sentencia switch toma un único valor, y luego lo compara con un montón de otros valores utilizando una expresión booleana. Cuando una de estas expresiones booleanas es verdadera, entonces se ejecutará una pieza específica de código.
Esta estructura le permite asignar fácilmente un valor a un trozo de código que debe ser ejecutado. Echa un vistazo a una simple declaración de conmutación a continuación para tener una idea de la sintaxis en Ruby:
Copiami_calificación = "A "case mi_calificación when "A" puts "You Pass" when "F" puts "You fail" else puts "Invalid grade "end
Como puedes ver arriba, empezamos con un valor myGrade
. Esencialmente queremos imprimir si el alumno ha aprobado o suspendido dada su nota (A o F).
Ahora que tenemos nuestro valor, queremos establecer una serie de sentencias case. Estas sentencias case son esencialmente el lado derecho de una expresión booleana de igualdad. Ruby comparará myGrade
con cada uno de los valores de las sentencias case (‘A’ y ‘F’) para la igualdad. Si hay una coincidencia, entonces se ejecutará el código directamente debajo de la sentencia case.
Breaks
Una cosa que es importante tener en cuenta con las sentencias switch es que por defecto, Ruby intentará comprobar la igualdad de todas ellas, incluso si obtiene una coincidencia. Esto es diferente de una estructura ELSE IF
en la que una vez que una condición es verdadera deja de comprobar las que están por debajo.
Debido a que Ruby comprobará automáticamente todos los casos sin importar lo que ocurra, necesitamos una forma de evitar esto (la mayoría de las veces se quiere evitar esto). En el caso de una coincidencia, quiero que la sentencia switch deje de comprobar los demás casos.
Ahí es donde entra la palabra clave break
. La palabra clave break le dice a Ruby que hemos terminado con la sentencia switch, y que debe salir de ella y seguir adelante.
Personalmente me he encontrado con una buena cantidad de errores en los programas que he escrito por olvidarme de poner las sentencias break. Así que ten esto en mente.
Por defecto
Si examinas la sentencia switch de arriba también notarás la palabra clave default
. Esta palabra clave actúa como un ELSE
en una estructura de sentencia if. Cualquier código por debajo de la declaración por defecto se ejecutará si ninguno de los otros casos obtiene una coincidencia. Observa también que no necesitamos una sentencia break dentro del default.
Generalmente, cuando se da una situación en la que se utiliza un switch, el default simplemente atrapará cualquier situación que no se quiera especificar en una sentencia case.
En el caso del programa anterior está imprimiendo Invalid Grade
para cualquier grado que no sea un A
o un F
.
Envolviéndolo
En la práctica, las sentencias switch se utilizan con mucha menos frecuencia que las sentencias if. La razón es que hay muchas menos situaciones en las que una sentencia switch es apropiada sobre una sentencia if. Sin embargo, una buena regla general es que si necesita comprobar la igualdad de un valor con otros valores, entonces puede necesitar un switch.