Война Анны
- 1 year ago
- 0
- 0
Спагетти-код (также индусский код ) — плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа , особенно содержащая много операторов 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| puts "#{i}\t в квадрате = #{i**2}"}
puts "Программа завершена."
По аналогии со «спагетти-кодом» программисты придумали ещё несколько понятий, пока не общепринятых.