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

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

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

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

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

Спагетти-код обычно возникает:

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

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

Содержание

Пример

Ниже приводится пример спагетти-кода на Бейсике, выполняющего простое действие — печать чисел от 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 "Программа завершена."

См. также

Примечания

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spaghetti code.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Спагетти-код" в других словарях:

  • Спагетти (значения) — Готовые спагетти. Спагетти макаронное изделие из длинных и тонких нитей. В переносном смысле, спагетти может обозначать что то переплетённое, сложное или запутанное: многоуровневую транспортную развязку со множеством длинных эстакад,… …   Википедия

  • Антипаттерн — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (25 мая 2011) …   Википедия

  • Раздувание программного обеспечения — (англ. software bloat, bloatware)  тенденция новых программ быть больше по объёму и требовать больше системных ресурсов по сравнению со старыми[источник не указан 267 дней]. Никлаус Вирт в 1996 году написал статью… …   Википедия

  • Раздувание ПО — Раздувание программного обеспечения (англ. software bloat, bloatware)  тенденция новых программ быть больше по объёму и требовать больше системных ресурсов по сравнению со старыми. В результате у многих людей появляется ощущение, что рост… …   Википедия

  • Функция для галочки — Раздувание программного обеспечения (англ. software bloat, bloatware)  тенденция новых программ быть больше по объёму и требовать больше системных ресурсов по сравнению со старыми. В результате у многих людей появляется ощущение, что рост… …   Википедия

  • Стандарт оформления кода — (стандарт кодирования, стиль программирования) (англ. coding standards, coding convention или programming style)  набор правил и соглашений, используемых при написании исходного кода на некотором языке программирования. Наличие общего… …   Википедия

  • Шаблоны проектирования GRASP — GRASP (англ. General Responsibility Assignment Software Patterns (общие образцы распределения обязанностей)) паттерны, используемые в объектно ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам. В …   Википедия

  • GRASP — (англ. General Responsibility Assignment Software Patterns  общие образцы распределения обязанностей)  паттерны, используемые в объектно ориентированном проектировании для решения общих задач по назначению обязанностей классам и… …   Википедия

  • Список серий мультсериала «Закусочная Боба» — Список и краткое описание эпизодов мультсериала «Закусочная Боба» (англ. Bob s Burgers). Для удобства серии сгруппированы по сезонам. Содержание 1 Список эпизодов 1.1 Первый сезон : 2011 …   Википедия

  • Парадигма — (Paradigm) Определение парадигмы, история возникновения парадигмы Информация об определении парадигмы, история возникновения парадигмы Содержание Содержание История возникновения Частные случаи (лингвистика) Управленческая парадигма Парадигма… …   Энциклопедия инвестора


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»