Como ingenieros, siempre debemos esforzarnos por escribir código simple.
Un error común que es típico de muchos lenguajes de programación y no solo de Python es el horrible mal uso de if-elif .
Si quieres abordar este problema y mejorar la legibilidad y facilidad de mantenimiento de tu código, ¡quédate aquí, este artículo es para ti!
Caso de uso del controlador de solicitudes
Un sistema de gestión de clientes recibe solicitudes.
Cada solicitud contiene una acción y un nombre de cliente. Las acciones consisten en crear un nuevo cliente, activar un cliente, suspender un cliente y eliminar un cliente.
Hay cuatro tipos y cada uno se maneja de forma diferente.
Cada solicitud es un diccionario de Python:
A continuación se muestra un diagrama de flujo potencial que aborda este caso de uso:
Y el código Python equivalente:
¿Puedes detectar el problema? Hay muchos if y elif
que hacen que el código sea más complejo , menos legible (¡demasiado largo!) y más difícil de mantener.
Además, para manejar las acciones, el código a veces tiene que pasar por varios "si" que no coinciden, lo que no es ideal a medida que el número de acciones aumenta (complejidad de O(n), donde n es el número de acciones).
¡Afortunadamente, existe una solución sencilla!
¡Diga no a If-elif!
Como puede ver en el código a continuación, la sección if-elif se elimina en favor de un diccionario que asigna cada acción a la función del controlador correspondiente: línea 3, ACTION_MAPPING .
Ahora, cualquier controlador de acción se selecciona inmediatamente en la línea 18 del diccionario (en un orden promedio de O(1) ), y el controlador se llama en la línea 20.
Por ejemplo, para una acción ' activar ', se seleccionará _handle_activate_request .
Nota al margen: dado que la entrada se valida en la línea 13, la acción siempre se encuentra en el diccionario ACTION_MAPPING .
¿Cuál es la mejor práctica?
If-elif no es malo; es una parte esencial del lenguaje.
Sin embargo, como ocurre con todo en la vida, no hay que exagerar.
Mi regla general es que basta con un if-elif. Si necesitas más, utiliza el mecanismo de mapeo de diccionarios.
Por último, utilice una herramienta de análisis de complejidad de código como Radon / Xenon . Pueden identificar áreas problemáticas y ayudarlo a refactorizar su código para convertirlo en una obra maestra.
Comments