"Algoritmos + Estructuras de datos = Programas"

-- 鉁嶏笍 Niklaus Wirth

馃 La l贸gica puede estar en los datos

Normalmente los requisitos funcionales son complejos y vol谩tiles. Este tandem genera mucho ruido en el c贸digo. Manipulaciones constantes de secciones complejas son fuente de dolor de cabeza.

Hemos dedicado un tema a las estructuras repetitivas y condicionales y hemos visto c贸mo reducir la complejidad o al menos clarificar la intenci贸n de la l贸gica.

En estas regiones de c贸digo es d贸nde m谩s claramente se expresa la l贸gica del negocio que estamos modelando y debemos prestarles especial atenci贸n. Pero mucho mejor ser铆a no tener que hacerlo.

馃敤 Usa estructuras de datos que eviten el uso de estructuras condicionales

Si la l贸gica cambia y no queremos cambiar el c贸digo; tenemos un problema. La soluci贸n pasa por reducir el uso de las estructuras condicionales sustituy茅ndolas por estructuras de datos.

3锔忊儯 La regla de 3

Este tipo de actuaci贸n en el c贸digo es exigente en t茅rminos de destreza t茅cnica y dominio del negocio. Pero eso no debe echarte atr谩s. Simplemente quiere decir que empieces poco a poco y que lo apliques como un refactor cuando lo veas necesario.

Como regla para recordar, nos sugieren que optemos por la sustituci贸n de estructuras l贸gicas en cuanto haya tres modificaciones de cualquier regla establecida. Es por eso que se recuerda como la regla de tres. Veamos un ejemplo.

1锔忊儯 No hay que anticipar nada cuando te expresan una primera regla. Por ejemplo "Mi empresa opera en Espa帽a".

2锔忊儯 Puedes empezar sospechar ante un primer cambio "Vamos a abrir tambi茅n en M茅xico con estas condiciones".

3锔忊儯 Pero ante el tercer caso... no dudes: apl铆cate y generaliza tu c贸digo. "En dos meses estaremos en Colombia"

El if y sobre todo el switch huelen mal 馃あ

Como consecuencia de los cambios en las reglas de negocio tendr谩s que implantar o modificar muchas instrucciones con if else o peor a煤n con switch case. Cuanto menos toques el c贸digo mejor. As铆 que procura usar menos el if y el switch

  • Reduce los if evitando 馃毄 flags en las funciones, creando funciones distintas.
  • Sustituye un 馃敱switch por un objeto, un array o un mapa y busca en 茅l un valor o funci贸n.
  • Incluso valora cambiar un 馃敱switch por un sistema de clases con herencia 馃槺 usando la inversi贸n de control 馃檭.

Ver谩s que poco a poco tu c贸digo ser谩 m谩s gen茅rico y admitir谩 m谩s cambios funcionales sin necesidad de recompilar. Ver谩s entonces que el mundo est谩 llenos de estructuras de datos por todas partes.

Estructuras de datos por todas partes