La sentencia switch-case es una característica poderosa que permite el control del flujo del programa basado en el valor de una variable o expresión. Se puede utilizar para ejecutar diferentes bloques de código, dependiendo del valor de la variable en tiempo de ejecución. A continuación un ejemplo en Java:

Así es como funciona:

  1. El compilador genera una tabla de salto para la declaración
  2. La variable/expresión del switch es evaluado una vez
  3. La sentencia switch busca por la variable/expresión en la tabla de salto y directamente ejecuta ese bloque de código
  4. Si no se encuentra un resultado, se ejecuta el código default

En el ejemplo, dependiendo de la variable month, aparece un mensaje distinto en la salida estandard. En este caso, como la variable es igual a 8, «August» se imprimirá en la salida estándar.

Sentencia Switch

Aunque los lenguajes populares como Java y PHP tienen una declaración switch ya incorporada, puede que se sorprenda al saber que el lenguaje Python no tiene uno. Como tal, puede estar tentado a utilizar una serie de bloques if-else-if, usando una condición if para cada alternativa.

Sin embargo, debido a la tabla de salto, una instrucción switch es mucho más rápido que una escalera if-else-if. En lugar de evaluar cada condición en forma secuencial, solo tiene que buscar la variable/expresión una vez y saltar directamente a la rama apropiada de código para ejecutarla.

Como se implementa la sentencia switch en Python

La forma de Python de implementar la instrucción switch es utilizar las asignaciones de diccionarios, también conocidas como matrices asociativas, que proporcionan asignaciones simples de clave-valor de uno a uno.

Aquí esta la implementación de Python de la declaración anterior. En el siguiente ejemplo, creamos un diccionario llamado switcher para almacenar todos los casos del tipo switch.

En el ejemplo, al pasar un argumento en la función switch_demo, se busca el valor en el diccionario. Si se encuentra una coincidencia, se imprime el valor asociado, de lo contrario se imprime una cadena predeterminada («Invalid Month»). La cadena predeterminada ayuda a implementar la opción «default» de la sentencia switch.

Asignación de diccionario para funciones

Aquí es donde se vuelve más interesante. Los valores de un diccionario de Python pueden ser de cualquier tipo de datos. De modo que no tiene que limitarse a utilizar constantes (enteros, cadenas), también puede utilizar nombres de funciones y lambdas como valores.

Por ejemplo, también puede implementar la instrucción switch anterior creando un diccionario de nombres de funciones como valores. En este caso, switcher es un diccionario de nombres de funciones y no de cadenas.

Aunque las funciones anteriores son bastantes simples y solo devuelven cadenas, puede usar este enfoque para ejecutar bloques elaborados de código dentro de cada función.

De hecho, si llama métodos a objetos, incluso puede usar un método de envío para determinar dinámicamente a que función se debe llamar durante el tiempo de ejecución.

Basado en el argumento, la función getattr() recuperará métodos de objetos con el nombre en particular.

Ventajas de la implementación switch de Python

Dado que puede alterar los diccionarios de Python en tiempo de ejecución (agregar, eliminar o actualizar pares clave-valor), puede cambiar fácilmente la declaración de conmutación en tiempo de ejecución. Aquí un ejemplo.

La sentencia switch es muy útil, que no sólo proporciona un mejor rendimiento que una instrucción if-else, sino que también te deja un código más manejable. Si has tenido límites por la falta de la sentencia swith en Python, entonces con suerte, este artículo te ayudará a implementarlo.


Este artículo se encuentra basado en How to implement a switch-case statement in Python

Python: Como se implementa una sentencia switch-case
Si te gusto, comparte ...Share on email
Email
Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
Linkedin
Share on google
Google
Etiquetado en:        

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook