Spaghetti code

termine dispregiativo
Versione del 2 mar 2018 alle 14:01 di 88.54.194.130 (discussione) (Cappelletti 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]

Un piatto di spaghetti è indissolubilmente intrecciato, da qui il nome spaghetti code.

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.

Esempio

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.

Termini Correlati

La frase "Spaghetti code" ha ispirato la coniazione di altri termini che confrontano similmente la struttura del programma con gli stili di pasta. La meta-frase generale è "programming pasta".

Ravioli code

Il "Ravioli code" è una frase peggiorativa per il codice sorgente con l'utilizzo di molti piccoli oggetti strettamente accoppiati. La struttura di controllo aggrovigliata ma esplicita dello "spaghetti code" è sostituita da un flusso di controllo altrettanto aggrovigliato ma ora implicito che utilizza il polimorfismo. La separazione eccessiva e l'incapsulamento del codice possono gonfiare le pile di chiamate e rendere più difficile la navigazione attraverso il codice a fini di manutenzione.

Cappelletti code

"Cappelletti code", coniato nel 2017 da François Sunatori, è una frase peggiorativa per descrivere un tentativo di nascondere la vera natura del codice attraverso l'introduzione di complessità al fine di fornire un vantaggio rispetto alla concorrenza.

Note

  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

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica