Un case o switch con muchas clausulas, o muchos ifs anidados, tampoco es una buena idea

A raíz del post del otro día sobre repetir el código, me vino el recuerdo de otro gran clásico, y no podía dejarlo, lo tenía que postear: tener un case o switch con muchas clausulas, o muchos ifs anidados, tampoco es ninguna una buena idea.
Aunque hace ya tiempo que no me dedico a ello, hubo una época en la que profesionalmente traté mucho con explicar, solucionar y detectar problemas como este. Tanto que problemas como este además de inspirar una tesis doctoral dieron para un libro.
No es bueno tener un case o switch con muchas clausulas, o muchos ifs anidados, porque, entre otros:
– Hace muy difícil entender el código, lo que lleva a que es más difícil mantenerlo, lo que lleva a que se aumenta el coste (€ $) del mantenimiento.
– Cada vez que hay que añadir un comportamiento más, una nueva clausula en el case o switch, hay que modificar ese fuente y recompilar. Lo que aumenta el coste del mantenimiento.
– Y porque está bastante probado que esta práctica suele llevar a la del otro día, a repetir el código. Que también aumenta el coste del mantenimiento.
Esta sospechosa práctica también forma parte de los “bad smells” (“malos olores”) de Beck y Fowler, y que citan como “switch statements”.
Y aunque os encontreis con el lado oscuro, quien os dirá que es imposible evitarlo… asegurar que si, que si hay otras maneras de codificar la lógica condicionar. Una de las más famosas es mediante el polimorfismo, seleccionando en tiempo de ejecución la parte condicional, vamos, lo que hacen los viejos patrones State y Strategy del Gamma. Y como en el caso del código repetido, esta práctica suele esconder algún problema de diseño y es fácilmente detectable con muchas herramientas de software libre.
Aunque hace tiempo que deje de tratar tanto con este tipo de problemas (que no de encontrármelos en revisiones y auditorías) parece que el mundo ha seguido luchando contra ello… hasta el punto de que incluso he encontrado videos en youtube sobre ello. Ya no hay escusa para seguir anidando numerosos ifs ; – ).

0 comentarios en “Un case o switch con muchas clausulas, o muchos ifs anidados, tampoco es una buena idea”

Deja un comentario

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

Share This
Ir arriba