Kód špagety

Špagetový kód  je špatně navržený, špatně strukturovaný, matoucí a obtížně srozumitelný program , zvláště pokud obsahuje mnoho příkazů GOTO (zejména zpětných skoků), výjimek a dalších konstrukcí, které degradují strukturu [1] . Nejběžnější programovací anti -vzor .

Kód špaget je tak pojmenován, protože tok programu je jako mísa špaget , tedy klikatý a spletitý. Někdy se nazývá „ klokaní kód“ ( klokaní kód ) kvůli mnoha instrukcím „skok“.

V dnešní době se tento termín používá nejen pro případy zneužití GOTO, ale také pro jakýkoli "multi-linked" kód, ve kterém je stejný malý fragment vykonáván ve velkém množství různých situací a plní velmi mnoho různých logických funkcí [1] .

Kód špaget se obvykle vyskytuje:

není to výsledek záměrného zamlžování.

Kód špaget lze odladit a spustit správně a s vysokým výkonem, ale je extrémně obtížné jej udržovat a vyvíjet [1] . Úpravy špaget za účelem přidání nových funkcí někdy s sebou nesou tak obrovský potenciál pro zavádění nových chyb, že se refaktoring (hlavní lék na špagety) stává nevyhnutelným.

Příklad

Následuje příklad kódu špaget v BASICu , který provádí jednoduchou akci – tisk čísel od 1 do 10 a jejich čtverců. Skutečné příklady špagetového kódu jsou mnohem složitější a vytvářejí více problémů s údržbou.

10 i = 0 20 i = i + 1 30 pokud i <= 10 pak goto 70 40 pokud i > 10 pak goto 50 50 tisk "Program dokončen." 60 end 70 print i: " squared = " : i * i 80 goto 20

Stejný kód, napsaný v BASICu ve stylu strukturovaného programování :

pro i = 1 10 tisk i: " na druhou = " : i * i další i tisk "Program dokončen."

Stejný kód ve funkčním stylu využívající metodu iterace, napsaný v Ruby :

( 1 .. 10 ) . každý { | | vloží " #{ i } \t na druhou = #{ i ** 2 } " } vloží "Program dokončen."

Související pojmy

Analogicky s „kódem špaget“ přišli programátoři s několika dalšími koncepty, které ještě nejsou obecně přijímány.

  • Ravioli kód je kód skládající se z obrovského množství nezávislých komponent, a abychom pochopili, jak opravit chybu na spoji komponent, musíme „prorazit“ rozhraní mezi komponentami.
  • Baklava kód nebo lasagne kód je kód, který má příliš mnoho (pro daný úkol) vrstev abstrakce.
  • Kód Katamari je kód, který byl kdysi čistý, ale v procesu vývoje byl pokryt funkčností, jako „katamari“ ze hry Playstation .

Viz také

Poznámky

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Kód špaget Archivováno 27. ledna 2021 na Wayback Machine .

Odkazy