Spagettikoodi

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ä.

Esimerkki

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 20

Sama 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."

Aiheeseen liittyvät käsitteet

Analogisesti "spagettikoodin" kanssa ohjelmoijat ovat keksineet muutamia muita käsitteitä, joita ei vielä ole yleisesti hyväksytty.

  • Ravioli -koodi on koodi, joka koostuu valtavasta määrästä itsenäisiä komponentteja, ja ymmärtääkseen kuinka korjata virhe komponenttien risteyksessä, on "murtauduttava" komponenttien välisten rajapintojen läpi.
  • Baklava - koodi tai lasagnekoodi on koodi, jossa on liian monta (tietylle tehtävälle) abstraktiotasoa.
  • Katamari-koodi on koodi, joka oli kerran puhdas, mutta kehitysvaiheessa se peitettiin toiminnallisuudella, kuten "katamari" Playstation-pelistä .

Katso myös

Muistiinpanot

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spagettikoodi Arkistoitu 27. tammikuuta 2021 Wayback Machinessa .

Linkit