Spaghetti code

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Un piatto di spaghetti è indissolubilmente intrecciato, da qui il nome spaghetti code.

Spaghetti code è un termine dispregiativo per il codice sorgente di quei programmi per computer che hanno una struttura di controllo del flusso complessa e/o incomprensibile, con uso esagerato ed errato di go to, eccezioni, thread e altri costrutti di branching (diramazione del controllo) non strutturati.[1][2]

Il suo nome deriva dal fatto che questi tipi di codice tendono a assomigliare a un piatto di spaghetti, ovvero un mucchio di fili intrecciati ed annodati.

Spaghetti code è un esempio di anti-pattern.

Il seguente programma è un esempio banale di spaghetti code in BASIC. Esso stampa su schermo la sequenza di numeri da 1 a 10 e il loro quadrato. Si noti come le istruzioni di "GOTO" introducano una dipendenza dai numeri di riga del programma, e come il flusso di esecuzione salti in maniera imprevedibile da una zona all'altra. In pratica, nei programmi reali le occorrenze di spaghetti code sono ben più complesse e possono aumentare notevolmente i costi di manutenzione di un programma.

  10 dim i
  20 i = 0
  30 i = i + 1
  40 if i <= 10 then goto 70
  50 print "Programma terminato."
  60 end
  70 print i & " al quadrato = " & i * i
  80 goto 30

Ecco un esempio di codice equivalente scritto con uno stile di programmazione strutturato:

 function square(i)
     square = i * i
 end function  
 dim i
 for i = 1 to 10
     print i & " al quadrato = " & square(i)
 next
 print "Programma terminato."

Anche questo programma esegue salti, ma in questo caso si tratta di salti predicibili e formalizzati. Questo perché il ciclo for e le funzioni definiscono flussi di controllo standardizzati, mentre le istruzioni goto incoraggiano flussi di controllo arbitrari.

  1. ^ (EN) What is spaghetti code?, su stackoverflow.com, 28 ottobre 2010. URL consultato il 28 settembre 2016.
  2. ^ (EN) Spaghetti Code, su gnu.org, aprile/maggio 1992. URL consultato il 28 settembre 2016.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica