Codul spaghetti este un program prost conceput, prost structurat, confuz și greu de înțeles , mai ales dacă conține o mulțime de instrucțiuni GOTO (în special back jumps), excepții și alte constructe care degradează structura [1] . Cel mai comun anti -model de programare .
Codul de spaghete este numit astfel deoarece fluxul programului este ca un castron de spaghete , adică întortocheat și întortocheat. Denumit uneori „ codul cangurului ” ( codul cangurului ) din cauza numeroaselor instrucțiuni de „săritură”.
În zilele noastre, termenul se aplică nu numai cazurilor de abuz de GOTO, ci și oricărui cod „multi-linked” în care același fragment mic este executat într-un număr mare de situații diferite și îndeplinește foarte multe funcții logice diferite [1] .
Codul de spaghete apare de obicei:
nu este rezultatul ofucării deliberate .
Codul spaghetti poate fi depanat și rulat corect și cu performanțe ridicate, dar este extrem de dificil de întreținut și dezvoltat [1] . Editarea spaghetelor pentru a adăuga noi funcționalități are uneori un potențial atât de uriaș pentru introducerea de noi erori, încât refactorizarea (principalul remediu pentru spaghete) devine inevitabilă.
Următorul este un exemplu de cod spaghete în BASIC care efectuează o acțiune simplă - imprimarea numerelor de la 1 la 10 și a pătratelor acestora. Exemplele reale de cod spaghete sunt mult mai complexe și creează mai multe probleme de întreținere.
10 i = 0 20 i = i + 1 30 dacă i <= 10 , atunci mergi la 70 40 dacă i > 10 atunci mergi la 50 50 imprimă „Program finalizat”. 60 end 70 print i: " squared = " : i * i 80 goto 20Același cod, scris în BASIC în stilul de programare structurată :
for i = 1 to 10 print i: " squared = " : i * i next i print "Program finalizat."Același cod de stil funcțional folosind metoda iterației, scris în Ruby :
( 1 .. 10 ) . fiecare { | eu | pune " #{ i } \t pătrat = #{ i ** 2 } " } pune "Program finalizat."Prin analogie cu „codul spaghetti”, programatorii au mai venit cu câteva concepte care nu sunt încă general acceptate.