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

Спагетти-код (также индусский код) — плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа, особенно содержащая много операторов 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 "Программа завершена." 

Связанные понятия

По аналогии со «спагетти-кодом» программисты придумали ещё несколько понятий, пока не общепринятых.

  • Равиоли-код (Ravioli code) — Код, состоящий из огромного числа независимых компонентов, и чтобы понять, как исправить ошибку на стыке компонентов, надо «прорываться» через межкомпонентные интерфейсы. Его легко понять в классе, но не в контексте всего проекта
  • Пахлава-код или Лазанья-код (Lasagna code) — Код, в котором слишком много (для данной задачи) слоёв абстракции. В попытке использовать принцип «слоёного теста» для избавления от спагетти кода, слои оказываются слишком зависимы друг от друга и любое изменение в одном уровне портит весь проект
  • Пицца код (Pizza code) — Слишком плоская архитектура кода («спагетти» размазались по тарелке)
  • Катамари-код — Код, некогда чистый, но в процессе развития облеплявшийся функциональностью, как «катамари» из игры для Playstation

См. также

Примечания

Ссылки

Tags:

Спагетти-Код ПримерСпагетти-Код Связанные понятияСпагетти-Код См. такжеСпагетти-Код ПримечанияСпагетти-Код СсылкиСпагетти-КодGOTOАнтипаттернКомпьютерная программаОбработка исключенийСтруктурное программирование

🔥 Trending searches on Wiki Русский:

Коды субъектов Российской ФедерацииТаиландГедонизмCall of Duty (серия игр)Колчак, Александр ВасильевичКлимова, Екатерина АлександровнаОстров проклятыхАнглийский алфавитСу-57Кобейн, КуртЛермонтов, Михаил ЮрьевичКронберг, Лариса ИвановнаЕкатеринбургМоскваСвященная Римская империяЗемлетрясение в Турции и Сирии (2023)Леди ГагаОвен (знак зодиака)Германская Демократическая РеспубликаСписок стран по ВВП (ППС)ПинапМиГ-31Киевская РусьЛебедев, Денис АлександровичТяжёлая огнемётная системаКалькуляторКитайская Республика (Тайвань)WindowsИранРостов-на-ДонуТы (телесериал)КоранДесять заповедейПротесты против пенсионной реформы во Франции (2023)Джон Уик 4ЗемляСанкт-ПетербургЧелленджер 2ВолгоградМакрон, ЭмманюэльКрик (фильм, 2022)Война Судного дняСодружество Независимых ГосударствThe Last of UsЧан, ДжекиЛавров, Сергей ВикторовичЯнковский, Олег ИвановичКубаШизофренияЖарков, Алексей ДмитриевичMinecraftБиминиСонный параличTelegramАмпир V (фильм)Речь ПосполитаяСборная Казахстана по футболуСписок фильмов по комиксам DC Comics1984 (роман)Организация Объединённых НацийЛопес, ДженниферБайкалОтмена крепостного права в РоссииБенавидес, ДэвидАлександр IARMv8Ткачук, Евгений ВалерьевичGNU GPL 3ФэнтезиИисус ХристосКуколдХристианствоУотсон, ЭммаЧайковский, Пётр ИльичСубъекты Российской ФедерацииБеспилотный летательный аппаратЗаглавная страницаНационал-социализмПанченко, Диана Витальевна🡆 More