Si alguien me preguntara algún día cuál es el problema más recurrente que he visto en el desarrollo de software, sin pensarlo dos segundos respondería: el código duplicado. Indiscutiblemente debe haber algo mágico (y no entiendo qué) en copiar y pegar por todas partes líneas y líneas de código que hacen exactamente lo mismo. Hay personas decentes que copian pequeños fragmentos, pero hay quienes escandalosamente calcan funcionalidades inmensas sin detenerse un instante a analizar las consecuencias.
Un desastre... no hay otra forma de describirlo
Nada más simple que copiar aquí y pegar allá. Y... espera, creo que esto lo resuelvo cogiendo aquello y poniéndolo aquí también. ¿Y qué tal si usamos para esto lo mismo que estamos haciendo para eso otro?
Indiscutiblemente el "copia-pega" habría que incluirlo en el listado de actividades terroristas, porque sus consecuencias son en casi todos los casos nefastas. Cada nueva modificación que tenemos que hacer hay que repetirla en todos los lugares donde duplicamos el código... pero esperen... ¿y quién se acuerda de eso? ¿Dónde diablos fue que pegamos estas cuatro líneas? El primer día todo está claro, pero luego de una semana las probabilidades de olvidarnos un lugar son impresionantes.
Por otra parte, la complejidad de nuestra aplicación crecerá con cada línea duplicada, el número probable de errores se multiplicará, y en general estaremos haciendo el papel del cocinero que prepara un enorme espaguetis con la diferencia que el resultado no lo van a disfrutar los comensales.
DRY - No te repitas a tí mismo
Ese es mi modesto aporte a la traducción de DRY (Don't Repeat Yourself), uno de los principios más conocidos, y que sin entrar en mayores detalles, aboga específicamente por evitar el código duplicado. Otro, que me parece incluso mucho más gracioso, es DIE (Duplication is Evil - o la duplicidad es dañina), ya que "die" precisamente quiere decir "muere" en inglés.
El caso es que, aunque no existe oficialmente - aún -, los desarrolladores deberíamos celebrar el Día Internacional del Código No Duplicado, y cortarle la cabeza a todo aquel que ose repetir líneas durante esas 24 horas. Cuando acabe el día, podríamos rebajar el castigo a un año de privación de libertad por cada línea duplicada (me pregunto cuántos saldrían con cadena perpetua). El punto es quitarnos la costumbre que tanto daño hace a todos los que trabajamos en la industria.
¿Cómo evitar el copia-copia / pega-pega?
No todos los problemas tienen la misma solución ni los mismos mecanismos para llegar a esta. Evitar duplicar un código depende de dónde estemos y de qué cosa queramos duplicar (y que como niños buenos vamos a evitar). Muchas veces resulta tan simple como crear un método que encapsule la funcionalidad, pero otras requiere de pasos más complicados que hay que pensar cuidadosamente.
Para no alargar mucho más este post, en los próximos días voy a publicar artículos separados con diferentes escenarios, donde paso a paso eliminaremos cada una de las líneas duplicadas. La idea sería tratar de abarcar la mayor cantidad de variantes posibles, así que si alguien quiere ayudar, les pido que me dejen en los comentarios (Yay! ¡Ahora son con el plugin de Facebook!) sus ideas o ejemplos al respecto.
Ahhh... y recuerden el castigo...