мини|Порција шпагета изгледа изувијано и замршено, што је и био разлог да се уведе појам шпагети код. Шпагети код је погрдни израз за програмски код који има сложену и замршену контролну структуру, посебно за код који садржи много -{GOTO}- наредби или других „неструктурираних“ конструкција чија је суштина промена тока извршења програма.
Добио је такав назив пошто ток извршавања програма има тенденцију да личи на порцију шпагета, због своје сложености и замршености. Употребљава се још и термин кенгуров код јер такав код има у себи много скокова.
Примери Следи тривијалан пример шпагети кода писан у -{BASIC}--у. Програм приказује на екрану бројеве од 1 до 10, заједно са њиховим квадратима. Може се приметити да нема увучених редова који и нису потребни јер се -{GOTO}- наредба реферише на број којим је означен ред. Такође се може приметити да је ток извршавања програма непредвидљив. 10 i = 0 20 i = i + 1 30 print i; " squared = "; i * i 40 if i < 10 then goto 20 50 print "Program je zavrsio sa radom." 60 end
Ово је исти код написан по правилима структурираног програмирања: for i = 1 to 10 print i; " squared = "; i * i next i print "Program je zavrsio sa radom." Програмски код прелази из једног дела у други, али су ти преласци предвидљиви, захваљујући употреби -{FOR}- петљи и функција које чине стандардни начин за контролу тока. Са друге стране, -{GOTO}- наредба не подржава контролу тока извршавања програма. Иако је овај пример кратак, прави програми обично имају много линија кода и јако су тешки за одржавање ако су написани као шпагети код.
Програмски језици различитих нивоа Када се користи неки од многих облика асемблера (као и одговарајући машински језик) велика је опасност од стварања шпагети кода зато што су у питању програмски језици ниског нивоа у којима се ретко могу наћи еквиваленти за структуриране наредбе којима се контолише ток извршавања програма као што су FOR петља и WHILE петља.
Програми написани на језицима вишег нивоа са конструкцијама као што су -{FOR}- петље (као у наведеном другом примеру) се често компајлирају у асемблер или машински језик. У таквим ситуацијама, конструкције високог нивоа се преводе у „шпагети код“ који подсећа на први наведени пример у терминима контроле тока извршавања. Како компајлери морају подржавати конструкције високог нивоа у изворном коду, они немају проблема какви се могу срести при програмирању у -{BASIC}--у.
Види још Структурирано програмирање IOCCC Равиоли код Лазања код
Спољашње везе -{GOTO}- наредба се сматра штетном Не знамо где да идемо, ако не знамо одакле смо дошли (-{We don't know where to GOTO if we don't know where we've COME FROM}-) Реструктурирање Јава шпагети кода - од једне класе до седам класа
Категорија:Програмирање