Spaghetti code: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
ortografia e piccole correzioni |
aggiunto esempi |
||
Riga 1:
[[Image:Spaghetti.jpg|thumb|Un piatto di [[spaghetti]] è indissolubilmente intrecciato, da qui il nome '''spaghetti code'''.]]
'''Spaghetti code''' è un termine dispregiativo per quei [[programma (informatica)|programmi]] per [[computer]] che abbiano una [[struttura di controllo]] del flusso complessa e/o incomprensibile, con uso esagerato ed errato di [[GOTO|''go to'']], [[eccezione (informatica)| eccezioni]], [[thread]] e altri costrutti di ''branching'' (diramazione del controllo) non strutturati.
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|''goto'']] introducano una dipendenza dai numeri di riga del programma, e come il flusso di esecuzione salti in maniera impredicibile da una zona all'altra. In pratica, nei programmi reali le occurrenze di spaghetti code sono ben più complesse e possono aumentare notevolmente i costi di [[Manutenzione (Software)|manutenzione]] di un programma.
10 dim i
20 i = 0
30 i = i + 1
40 if i <> 10 then goto 90
50 if i = 10 then goto 70
60 goto 30
70 print "Programma terminato."
80 end
90 print i & " al quadrato = " & i * i
100 goto 30
Ecco un esempio di codice equivalente scritto con uno stile di programmazione strutturato:
dim i
for i = 1 to 10
print i & " al quadrato = " & square(i)
next
print "Programma terminato."
function square(i)
square = i * i
end function
Anche questo programma esegue salti, ma in questo caso si tratta di salti predicibili e formalizzati. Questo perché i [[Loop (Informatica)|loop]] ''for'' e le [[Funzione (Informatica)|funzioni]] definiscono [[Struttura di controllo|flussi di controllo]] standardizzati, mentre le istruzioni ''goto'' incoraggiano flussi di controllo arbitrari.
== Voci correlate ==
|