A spagetti kód egy rosszul megtervezett, rosszul strukturált, zavaros és nehezen érthető program , különösen, ha sok GOTO utasítást (főleg visszaugrást), kivételeket és egyéb szerkezetet rontó konstrukciókat tartalmaz [1] . A leggyakoribb programozási anti -minta .
A spagetti kódot azért nevezték így el, mert a program menete olyan, mint egy tál spagetti , azaz kanyargós és csavaros. Néha " kenguru kódnak" ( kenguru kódnak ) hívják a sok "ugró" utasítás miatt.
Manapság a kifejezést nem csak a GOTO-val való visszaélés eseteire alkalmazzák, hanem minden olyan "többszörös linket" tartalmazó kódra is, amelyben ugyanaz a kis töredék számos különböző helyzetben fut le, és nagyon sok különböző logikai funkciót lát el [1] .
A spagetti kód általában előfordul:
nem szándékos elhomályosítás eredménye.
A spagetti kód hibakereshető és megfelelően és nagy teljesítménnyel futtatható, de rendkívül nehéz fenntartani és fejleszteni [1] . A spagetti szerkesztése új funkciók hozzáadására olykor olyan hatalmas lehetőségeket rejt magában az új hibák bevezetésében, hogy a refaktorálás (a spagetti fő gyógymódja) elkerülhetetlenné válik.
Az alábbiakban egy példa látható a BASIC spagettikódjára, amely egy egyszerű műveletet hajt végre - kinyomtatja a számokat 1-től 10-ig és négyzeteiket. A spagettikód valódi példái sokkal összetettebbek, és több karbantartási problémát okoznak.
10 i = 0 20 i = i + 1 30 , ha i <= 10 , akkor 70 40 , ha i > 10 , akkor 50 50 print " Program kész ." 60 vége 70 print i: " squared = " : i * i 80 goto 20Ugyanez a kód BASIC nyelven írva a strukturált programozás stílusában :
i = 1 -től 10 -ig print i : " squared = " : i * i next i print "Program kész."Ugyanaz a funkcionális stílusú kód az iterációs módszerrel, Ruby nyelven írva :
( 1 .. 10 ) . mindegyik { | én | " #{ i } \t squared = #{ i ** 2 } " } elhelyezi a "Program kész."A „spagetti kóddal” analógiaként a programozók még néhány olyan koncepcióval álltak elő, amelyek még nem általánosan elfogadottak.