Шпагети код

Из Википедије, слободне енциклопедије
Порција шпагета изгледа изувијано и замршено, што је и био разлог да се уведе појам шпагети код.

Шпагети код је погрдни израз за програмски код који има сложену и замршену контролну структуру, посебно за код који садржи много 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-у.

Види још[уреди]

Спољашње везе[уреди]