Código espagueti
El código espagueti es un término peyorativo para los programas de computación que tienen una estructura de control de flujo compleja e incomprensible. Su nombre deriva del hecho que este tipo de código parece asemejarse a un plato de espaguetis, es decir, un montón de hilos intrincados y anudados.
Tradicionalmente suele asociarse este estilo de programación con lenguajes básicos y antiguos, donde el flujo se controlaba mediante sentencias de control muy primitivas como goto y utilizando números de línea. Un ejemplo de lenguaje que invitaba al uso de código spaghetti es el QBasic de Microsoft en sus primeras versiones.
Evolución de los lenguajes de programación
En los años 60 solo se podía definir el flujo de un programa a base de poner if's anidados y variables booleanas para decidir la lógica. Más adelante ya se podían escribir funciones, de lo más general a lo más específico y en la actualidad con la programación orientada objetos hay conceptos como la modularidad, abstracción, encapsulamiento, desacoplamiento, herencia, etc... Hay herramientas y conceptos más que suficientes como para evitar escribir este tipo de código.
Refactorización
No hay nada malo en escribir código spaghetti inicialmente si esto facilita la comprensión del problema, lo incorrecto es considerar el código como acabado dejándolo de esta forma. Lo correcto es iterar sobre varios repasos del código usando lo que se conoce como refactorización. Las modernos entornos de programación como Eclipse o Visual Studio incluso incorporan funciones automáticas que facilitan esta tarea.
De código spaghetti a programación funcional
Se puede dar una comparación con las reglas básicas del periodismo de como escribir una noticia. Éstas indican que en el titular de la noticia tiene que mostrar la información más importante, a continuación entrar en detalle en el primer párrafo y después desglosar en los apartados subsecuentes. Así pues en el main del programa debe haber las funciones más generales y cada una de ellas tiene que llamar a continuación a funciones más específicas.
Con "refactorizar - extraer método" se puede realizar automáticamente cada rama de los if's del código spagettis se convierta en una función, mejorando mucho la visibilidad.
De programación funcional a programación orientada a objetos
Una vez se tienen las funciones claramente visibles es posible identificar cuales conforman una responsabilidad común y no entrelazada con el resto del código y por tanto es posible separarlas en objetos diferentes que ya tendrán los métodos y propiedades (que pueden ser privados, no visibles, desde el resto del código).