Спагетти-код — плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа, особенно содержащая много операторов GOTO (особенно переходов назад), исключений и других конструкций, ухудшающих структурированность[1]. Самый распространённый антипаттерн программирования.
Спагетти-код назван так, потому что ход выполнения программы похож на миску спагетти, то есть извилистый и запутанный. Иногда называется «кенгуру-код» (kangaroo code) из-за множества инструкций «jump».
В настоящее время термин применяется не только к случаям злоупотребления GOTO, но и к любому «многосвязному» коду, в котором один и тот же небольшой фрагмент исполняется в большом количестве различных ситуаций и выполняет очень много различных логических функций[1].
Спагетти-код обычно возникает:
при этом не является результатом преднамеренного запутывания.
Спагетти-код может быть отлажен и работать правильно и с высокой производительностью, но он крайне сложен в сопровождении и развитии[1]. Правка спагетти для добавления новой функциональности иногда несет такой огромный потенциал внесения новых ошибок, что рефакторинг (главное лекарство от спагетти) становится неизбежным.
Ниже приводится пример спагетти-кода на Бейсике, выполняющего простое действие — печать чисел от 1 до 10 и их квадратов. Реальные примеры спагетти-кода гораздо более сложные и создают большие проблемы при сопровождении программ.
1 10 i = 0
2 20 i = i + 1
3 30 if i <= 10 then goto 70
4 40 if i > 10 then goto 50
5 50 print "Программа завершена."
6 60 end
7 70 print i; " в квадрате = "; i * i
8 80 goto 20
Тот же код, написанный в стиле структурного программирования:
for i = 1 to 10
print i; " в квадрате = "; i * i
next i
print "Программа завершена."
Тот же код в функциональном стиле с использованием метода итерации, написанный на языке Ruby:
(1..10).each {|i| puts "#{i}\t в квадрате = #{i**2}"}
puts "Программа завершена."
По аналогии со «спагетти-кодом» программисты придумали ещё несколько понятий, пока не общепринятых.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .