Spaghettikode er et dårligt designet, dårligt struktureret, forvirrende og svært at forstå program , især hvis det indeholder mange GOTO-sætninger (især tilbagespring), undtagelser og andre konstruktioner, der nedbryder struktur [1] . Det mest almindelige programmerings anti -mønster .
Spaghetti-koden hedder sådan, fordi programmets flow er som en skål spaghetti , dvs. snoet og indviklet. Nogle gange kaldet " kængurukode " ( kængurukode ) på grund af de mange "spring"-instruktioner.
I dag anvendes udtrykket ikke kun på tilfælde af misbrug af GOTO, men også på enhver "multi-linket" kode, hvor det samme lille fragment udføres i et stort antal forskellige situationer og udfører mange forskellige logiske funktioner [1] .
Spaghetti-kode forekommer normalt:
det er ikke resultatet af bevidst sløring.
Spaghettikode kan fejlsøges og køres korrekt og med høj ydeevne, men det er ekstremt svært at vedligeholde og udvikle [1] . Redigering af spaghetti for at tilføje ny funktionalitet rummer nogle gange et så stort potentiale for at introducere nye fejl, at refactoring (den vigtigste kur mod spaghetti) bliver uundgåelig.
Det følgende er et eksempel på spaghettikode i BASIC , der udfører en simpel handling - udskrivning af tallene fra 1 til 10 og deres firkanter. Reelle eksempler på spaghettikode er meget mere komplekse og skaber flere vedligeholdelsesproblemer.
10 i = 0 20 i = i + 1 30 hvis i <= 10 så goto 70 40 hvis i > 10 så goto 50 50 print "Program completed." 60 end 70 print i: " squared = " : i * i 80 goto 20Den samme kode, skrevet i BASIC i stil med struktureret programmering :
for i = 1 til 10 udskriv i: " squared = " : i * i næste udskriver jeg "Program afsluttet."Den samme funktionelle kode ved hjælp af iterationsmetoden, skrevet i Ruby :
( 1..10 ) . _ _ hver { | jeg | sætter " #{ i } \t squared = #{ i ** 2 } " } sætter "Program completed."I analogi med "spaghettikoden" er programmører kommet med et par flere koncepter, som endnu ikke er almindeligt accepterede.