Спагетти-код

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску
Файл:Spaghetti.jpg
Тарелка спагетти

Спагетти-код — плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа, особенно содержащая много операторов GOTO (особенно вверх по тексту), исключений и других конструкций, ухудшающих структурированность.

Спагетти-код назван так, потому что ход выполнения программы похож на миску спагетти, то есть извилистый и запутанный. Иногда называется «кенгуру-код» (kangaroo code) из-за множества инструкций jump.

В настоящее время термин применяется не только к случаям злоупотребления GOTO, но и к любому «многосвязному» коду, в котором один и тот же небольшой фрагмент исполняется в большом количестве различных ситуаций и несет очень много функционалов.

Спагетти обычно возникает а) от неопытности разработчиков б) от серьезного прессинга по срокам, как установленного руководством (например, в принятой в компании системе мотивации на работу быстрее), так и установленного разработчиком самому себе (желание все сделать наиболее быстрым способом).

Спагетти-код может быть отлажен и работать правильно и с высокой производительностью, но он крайне сложен в сопровождении и развитии. Правка спагетти для добавления новой функциональности иногда несет такой огромный потенциал внесения новых ошибок, что рефакторинг (главное лекарство от спагетти) становится неизбежным.

Пример

Ниже приводится пример спагетти-кода на Бейсике, выполняющего простое действие — печать чисел от 1 до 10 и их квадратов. Реальные примеры спагетти-кода гораздо более сложные и создают большие проблемы при сопровождении программ.

10 i = 0
20 i = i + 1
30 if i <= 10 then goto 70
40 if i > 10 then goto 50
50 print "Программа завершена."
60 end
70 print i; " квадрат = "; i * i
80 goto 20

Тот же код, написанный в стиле структурного программирования:

for i = 1 to 10
    print i; " квадрат = "; i * i
next i
print "Программа завершена."

Тот же код в функциональном стиле с использованием метода итерации, написанный на языке Ruby:

 (1..10).each {|i| printf "%2d\t квадрат = %2d\n", i, i**2}
puts "Программа завершена."

См. также

Ссылки

ar:رماز متشابك de:Spaghetticode en:Spaghetti code es:Código spaghetti fr:Programmation spaghetti he:קוד ספגטי it:Spaghetti code ja:スパゲティプログラム ko:스파게티 코드 pl:Spaghetti code pt:Código espaguete sr:Шпагети код sv:Spaghettikod zh:面条式代码

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....