Spaghettikod är ett dåligt utformat, dåligt strukturerat, förvirrande och svårt att förstå program , speciellt om det innehåller många GOTO-satser (särskilt back jumps), undantag och andra konstruktioner som försämrar strukturen [1] . Det vanligaste antimönster för programmering .
Spagettikoden heter så eftersom programmets flöde är som en skål med spagetti , det vill säga slingrigt och krångligt. Kallas ibland " kängurukod " ( kängurukod ) på grund av de många "hopp"-instruktionerna.
Numera tillämpas termen inte bara på fall av missbruk av GOTO, utan också på vilken "multi-linked" kod som helst där samma lilla fragment exekveras i ett stort antal olika situationer och utför väldigt många olika logiska funktioner [1] .
Spagettikod förekommer vanligtvis:
det är inte resultatet av avsiktlig förvirring.
Spaghettikod kan felsökas och köras korrekt och med hög prestanda, men det är extremt svårt att underhålla och utveckla [1] . Att redigera spagetti för att lägga till ny funktionalitet har ibland en så enorm potential för att introducera nya buggar att refaktorering (det huvudsakliga botemedlet mot spaghetti) blir oundvikligt.
Följande är ett exempel på spagettikod i BASIC som utför en enkel åtgärd - att skriva ut siffrorna från 1 till 10 och deras rutor. Verkliga exempel på spagettikod är mycket mer komplexa och skapar fler underhållsproblem.
10 i = 0 20 i = i + 1 30 om i <= 10 sedan goto 70 40 om i > 10 sedan goto 50 50 print "Program completed." 60 end 70 print i: " squared = " : i * i 80 goto 20Samma kod, skriven i BASIC i stil med strukturerad programmering :
för i = 1 till 10 skriv ut i: " squared = " : i * i nästa skriver jag ut "Program avslutat."Samma funktionell stil kod med iterationsmetoden, skriven i Ruby :
( 1 ... 10 ) . varje { | jag | sätter " #{ i } \t squared = #{ i ** 2 } " } sätter "Program completed."I analogi med "spaghettikoden" har programmerare kommit på några fler koncept som ännu inte är allmänt accepterade.