El código espagueti es un programa mal diseñado, mal estructurado, confuso y difícil de entender , especialmente si contiene muchas declaraciones GOTO (especialmente saltos hacia atrás), excepciones y otras construcciones que degradan la estructura [1] . El anti -patrón de programación más común .
El código de espagueti se llama así porque el flujo del programa es como un plato de espagueti , es decir, tortuoso y enrevesado. A veces llamado " código canguro " ( kangaroo code ) debido a las muchas instrucciones de "salto".
Hoy en día, el término se aplica no solo a los casos de abuso de GOTO, sino también a cualquier código "multienlazado" en el que el mismo pequeño fragmento se ejecuta en un gran número de situaciones diferentes y realiza muchas funciones lógicas diferentes [1] .
El código espagueti generalmente ocurre:
no es el resultado de una ofuscación deliberada .
El código espagueti se puede depurar y ejecutar correctamente y con un alto rendimiento, pero es extremadamente difícil de mantener y desarrollar [1] . La edición de espaguetis para agregar nuevas funciones a veces conlleva un potencial tan grande para introducir nuevos errores que la refactorización (la principal cura para los espaguetis) se vuelve inevitable.
El siguiente es un ejemplo de código espagueti en BASIC que realiza una acción simple: imprimir los números del 1 al 10 y sus cuadrados. Los ejemplos reales de código espagueti son mucho más complejos y crean más problemas de mantenimiento.
10 i = 0 20 i = i + 1 30 si i <= 10 luego ir a 70 40 si i > 10 luego ir a 50 50 imprimir "Programa completado". 60 fin 70 imprimir i: " al cuadrado = " : i * i 80 ir a 20El mismo código, escrito en BASIC al estilo de la programación estructurada :
for i = 1 to 10 print i: " squared = " : i * i next i print "Programa completado".El mismo código de estilo funcional usando el método de iteración, escrito en Ruby :
( 1 .. 10 ) . cada { | yo | pone " #{ i } \t squared = #{ i ** 2 } " } pone "Programa completado".Por analogía con el "código espagueti", los programadores han ideado algunos conceptos más que aún no son generalmente aceptados.