Spaghetti code: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
YonaBot (discussione | contributi)
m robot Aggiungo: ru:Спагетти-код
Collegamenti esterni: Aggiunto il template "FOLDOC"
 
(70 versioni intermedie di 52 utenti non mostrate)
Riga 1:
[[ImmagineFile:Spaghetti.jpg|thumbminiatura|Un piatto di [[spaghetti]] è indissolubilmente intrecciato, da qui il nome '''spaghetti code'''.]]
'''''Spaghetti code''''' è un termine dispregiativo per il [[codice sorgente]] di quei [[programmaProgramma (informatica)|programmi]] per [[computer]] che abbianohanno una [[struttura di controllo]] del flusso complessa e/o incomprensibile, con uso esagerato ed errato di ''[[GOTO|''go to]]'']], [[eccezioneEccezione (informatica)| eccezioni]], [[Thread (informatica)|thread]] e altri costrutti di ''branching'' (diramazione del controllo) non strutturati.<ref>{{Cita web|https://stackoverflow.com/questions/195520/what-is-spaghetti-code|What is spaghetti code?|28 settembre 2016|lingua=en|data=28 ottobre 2010}}</ref><ref>{{Cita web|https://www.gnu.org/fun/jokes/pasta.code.html|Spaghetti Code|28 settembre 2016|lingua=en|data=aprile/maggio 1992}}</ref>
 
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.
Riga 8:
== 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 impredicibileimprevedibile 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 [[Manutenzionemanutenzione (Softwaresoftware)|manutenzione]] di un programma.
<syntaxhighlight lang=basic4gl>
 
10 dim i
20 i = 0
30 i = i + 1
40 if i <>= 10 then goto 9070
50 print "Programma terminato."
50 if i = 10 then goto 70
60 goto 30end
70 print i & "Programma terminato.al quadrato = " & i * i
80 endgoto 30
</syntaxhighlight>
90 print i & " al quadrato = " & i * i
100 goto 30
 
Ecco un esempio di codice equivalente scritto con uno stile di programmazione strutturato:
<syntaxhighlight lang=basic4gl>
 
function square(i)
square = i * i
end function
dim i
for i = 1 to 10
Line 28 ⟶ 29:
next
print "Programma terminato."
</syntaxhighlight>
Anche questo programma esegue salti, ma in questo caso si tratta di salti predicibili e formalizzati. Questo perché il [[Ciclo (informatica)|ciclo]] ''for'' e le [[Funzione (informatica)|funzioni]] definiscono [[Struttura di controllo|flussi di controllo]] standardizzati, mentre le istruzioni ''goto'' incoraggiano flussi di controllo arbitrari.
function square(i)
square = i * i
end function
 
== Note ==
Anche questo programma esegue salti, ma in questo caso si tratta di salti predicibili e formalizzati. Questo perché il [[Ciclo|ciclo]] ''for'' e le [[Funzione (informatica)|funzioni]] definiscono [[Struttura di controllo|flussi di controllo]] standardizzati, mentre le istruzioni ''goto'' incoraggiano flussi di controllo arbitrari.
<references />
 
== Voci correlate ==
* [[Codice sorgente]]
* [[Programmazione strutturata]]
*[[IOCCC]]
 
== Collegamenti esterni ==
* {{FOLDOC}}
* {{en}} [https://web.archive.org/web/20070703050443/http://www.acm.org/classics/oct95/ Go To Statement Considered Harmful]. La classica descrizione e degli spaghetti code fatta da [[Edsger Dijkstra]].
* {{en}}cita [web|http://thedailywtf.com/ |The Daily WTF - Curious Perversions In Information Technology]|lingua=en}}
 
{{Portale|informatica}}
[[Categoria:Anti-pattern]]
 
[[Categoria:Anti-pattern]]
[[de:Programmiererjargon]]
[[en:Spaghetti code]]
[[fr:Programmation spaghetti]]
[[he:קוד ספגטי]]
[[ja:スパゲティプログラム]]
[[ko:스파게티 코드]]
[[pl:Spaghetti code]]
[[pt:Código espaguete]]
[[ru:Спагетти-код]]
[[sv:Spagettikod]]