Špagetový kód je špatně navržený, špatně strukturovaný, matoucí a obtížně srozumitelný program , zvláště pokud obsahuje mnoho příkazů GOTO (zejména zpětných skoků), výjimek a dalších konstrukcí, které degradují strukturu [1] . Nejběžnější programovací anti -vzor .
Kód špaget je tak pojmenován, protože tok programu je jako mísa špaget , tedy klikatý a spletitý. Někdy se nazývá „ klokaní kód“ ( klokaní kód ) kvůli mnoha instrukcím „skok“.
V dnešní době se tento termín používá nejen pro případy zneužití GOTO, ale také pro jakýkoli "multi-linked" kód, ve kterém je stejný malý fragment vykonáván ve velkém množství různých situací a plní velmi mnoho různých logických funkcí [1] .
Kód špaget se obvykle vyskytuje:
není to výsledek záměrného zamlžování.
Kód špaget lze odladit a spustit správně a s vysokým výkonem, ale je extrémně obtížné jej udržovat a vyvíjet [1] . Úpravy špaget za účelem přidání nových funkcí někdy s sebou nesou tak obrovský potenciál pro zavádění nových chyb, že se refaktoring (hlavní lék na špagety) stává nevyhnutelným.
Následuje příklad kódu špaget v BASICu , který provádí jednoduchou akci – tisk čísel od 1 do 10 a jejich čtverců. Skutečné příklady špagetového kódu jsou mnohem složitější a vytvářejí více problémů s údržbou.
10 i = 0 20 i = i + 1 30 pokud i <= 10 pak goto 70 40 pokud i > 10 pak goto 50 50 tisk "Program dokončen." 60 end 70 print i: " squared = " : i * i 80 goto 20Stejný kód, napsaný v BASICu ve stylu strukturovaného programování :
pro i = 1 až 10 tisk i: " na druhou = " : i * i další i tisk "Program dokončen."Stejný kód ve funkčním stylu využívající metodu iterace, napsaný v Ruby :
( 1 .. 10 ) . každý { | já | vloží " #{ i } \t na druhou = #{ i ** 2 } " } vloží "Program dokončen."Analogicky s „kódem špaget“ přišli programátoři s několika dalšími koncepty, které ještě nejsou obecně přijímány.