Код-спагеті або спагеті-код — погано спроєктована, слабко структурована, заплутана і важка для розуміння програма. Особливо це стосується тих програм, які містять багато операторів безумовного переходу (GOTO), винятків та інших конструкцій, що погіршують структурованість.John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spaghetti code . Є найпоширенішим антипатерном програмування.

Код-спагеті названий так, тому що хід виконання програми схожий на спагеті, тобто звивистий і заплутаний. Іноді його називають «код-кенгуру» () через велику кількість інструкцій JUMP.

Наразі термін застосовується не тільки до випадків зловживання GOTO, але і до будь-якого «багатозв'язного» коду, в якому один і той же невеликий фрагмент виконується у великій кількості різних ситуацій і виконує дуже багато різних логічних функцій.

Код-спагеті зазвичай виникає: від недосвідченості розробників; від серйозного тиску щодо термінів, який може здійснюватись керівництвом (наприклад, якщо в компанії діє система мотивації за «роботу якомога швидше»), або розробник сам собі ставить такі терміни (бажання все зробити найшвидшим способом).

При цьому не є результатом навмисного заплутування.

Код-спагеті може бути налагоджений та працювати правильно і з високою продуктивністю, але він вкрай складний для супроводу та розвитку. Внесення змін до коду-спагеті для додавання нових функцій іноді має такий величезний потенціал внесення нових помилок, що рефакторинг стає неминучим.

Приклад Нижче наводиться приклад коду-спагеті мовою BASIC, який виконує просту дію: виводить на екран числа від 1 до 10 та їхні квадрати. Реальні приклади коду-спагеті набагато складніші і заплутаніші, вони створюють великі проблеми при супроводі програм. Цей приклад є дещо примітивним.

i = 0 i = i + 1 if i <= 10 then goto 7 if i > 10 then goto 5 print "Виконання програми завершене." end print i: " в квадраті = ": i * i goto 2

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

for i = 1 to 10 print i: " в квадраті = ": i * i next i print "Виконання програми завершене."

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

(1..10).each {|i| puts "#{i}\t в квадраті = #{i**2}"} puts "Виконання програми завершене."

Пов'язані терміни Код-равіолі — код, який складається з величезної кількості незалежних компонентів, і, щоб зрозуміти, як виправити помилку на стику компонентів, треба «прориватися» через міжкомпонентні інтерфейси. Код-пахлава або код-лазанья — код, в якому занадто багато (для цього завдання) шарів абстракції. Код-катамарі — код, який колись був написаний із дотриманням принципів написання «чистого» коду, але в процесі розвитку «обліплений» функціональністю, так само як «катамарі» з .

Примітки

Посилання Про шкоду оператора GOTO  — стаття відомого вченого в галузі комп'ютерних наук Едсгера Дейкстри Spaghetti code — FOLDOC