Cod de spaghete

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ă.

Exemplu

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 20

Acelaș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."

Concepte înrudite

Prin analogie cu „codul spaghetti”, programatorii au mai venit cu câteva concepte care nu sunt încă general acceptate.

  • Codul Ravioli este un cod format dintr-un număr mare de componente independente și, pentru a înțelege cum să remediați o eroare la joncțiunea componentelor, trebuie să „pătrundeți” prin interfețele intercomponente.
  • Codul baklava sau codul lasagna este un cod care are prea multe (pentru o anumită sarcină) straturi de abstractizare.
  • Codul Katamari este un cod care a fost odată curat, dar în procesul de dezvoltare a fost acoperit cu funcționalități, ca un „katamari” dintr -un joc Playstation .

Vezi și

Note

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Cod spaghete Arhivat 27 ianuarie 2021 la Wayback Machine .

Link -uri