Spagettikoodi on huonosti suunniteltu, huonosti jäsennelty, hämmentävä ja vaikeasti ymmärrettävä ohjelma , varsinkin jos se sisältää paljon GOTO-lauseita (etenkin taaksepäin hyppyjä), poikkeuksia ja muita rakennetta heikentäviä rakenteita [1] . Yleisin ohjelmoinnin estomalli .
Spagettikoodi on nimetty näin, koska ohjelman kulku on kuin kulho spagettia , eli mutkainen ja mutkainen. Joskus kutsutaan " kengurukoodiksi " ( kengurukoodi ) monien "hyppy" -ohjeiden vuoksi.
Nykyään termiä ei käytetä vain GOTO:n väärinkäyttötapauksiin, vaan myös kaikkiin "monilinkitettyihin" koodiin, joissa sama pieni fragmentti suoritetaan useissa eri tilanteissa ja suorittaa hyvin monia erilaisia loogisia toimintoja [1] .
Spagettikoodi esiintyy yleensä:
se ei ole seurausta tahallisesta hämärtämisestä.
Spagettikoodin virheenkorjaus ja suoritus voidaan suorittaa oikein ja korkealla suorituskyvyllä, mutta sitä on erittäin vaikea ylläpitää ja kehittää [1] . Spagettien muokkaaminen uusien toimintojen lisäämiseksi sisältää toisinaan niin valtavan potentiaalin uusien vikojen käyttöönotolle, että refaktoroinnista (spagetin päälääke) tulee väistämätöntä.
Seuraavassa on esimerkki spagettikoodista BASICissa , joka suorittaa yksinkertaisen toiminnon - tulostaa numerot 1-10 ja niiden neliöt. Todelliset esimerkit spagettikoodista ovat paljon monimutkaisempia ja aiheuttavat enemmän ylläpitoongelmia.
10 i = 0 20 i = i + 1 30 jos i <= 10 , sitten 70 40 , jos i > 10 , niin menee 50 50 tulosta " Ohjelma valmis." 60 end 70 print i: " squared = " : i * i 80 goto 20Sama koodi, kirjoitettu BASIC-kielellä strukturoidun ohjelmoinnin tyyliin :
i = 1-10 tulosta i: " squared = " : i * i next i print " Ohjelma valmis ."Sama toiminnallinen koodi iterointimenetelmää käyttäen, kirjoitettu Rubylla :
( 1 .. 10 ) . jokainen { | minä | laittaa " #{ i } \t squared = #{ i ** 2 } " } laittaa "Ohjelma valmis."Analogisesti "spagettikoodin" kanssa ohjelmoijat ovat keksineet muutamia muita käsitteitä, joita ei vielä ole yleisesti hyväksytty.