Процедурное программирование
Оригинальное название: procedural programming
Коротко
Стиль программирования, в котором программа — набор процедур (функций), вызываемых по порядку и работающих с переданными им данными.
Что такое «Процедурное программирование»
Это самый прямой способ записать алгоритм: сделать первое, потом второе, повторяющиеся куски оформить подпрограммами и вызывать по имени. Так писали на Фортране, Паскале, Си, так до сих пор устроены многие скрипты и утилиты. Процедурный стиль — разновидность императивного программирования: программа явно меняет состояние шаг за шагом. Общий контекст разобран в статье о парадигмах программирования.
Откуда взялось
Ранние программы были сплошным списком команд с переходами goto в любое место. Их было трудно читать и почти невозможно менять. В 1968 году Эдсгер Дейкстра опубликовал знаменитое письмо о вреде оператора goto, и сформировалось структурное программирование: только последовательность, ветвление и цикл, а крупные действия — в отдельных процедурах с одним входом и выходом. Процедурный подход вырос из этих идей и стал основой массового программирования 1970–80-х.
Пример: расчёт заказа набором функций
function calc_subtotal( array $items ): float {
return array_sum( array_map( fn( $i ) => $i['price'] * $i['qty'], $items ) );
}
function calc_order_total( array $items, float $discount ): float {
$sum = calc_subtotal( $items );
$sum = $sum - $sum * $discount;
return $sum + calc_delivery( $sum );
}
Данные — обычный массив, каждая функция принимает его и возвращает результат. Большая часть публичного API WordPress устроена так же: шаблонные теги the_title(), get_permalink(), wp_insert_post() — процедуры, хотя внутри ядра давно есть и классы вроде WP_Query.
Сильные и слабые стороны
- Легко начать и легко прочитать короткий код: видно, что за чем выполняется.
- Нет лишних слоёв — для скриптов, миграций данных и консольных утилит этого достаточно.
- С ростом проекта данные и функции, которые их меняют, расходятся по разным файлам. Глобальные переменные начинают менять из десятка мест, и становится непонятно, кто испортил значение.
- Добавить новый вариант поведения часто значит дописать ветку в каждой функции.
Последние два пункта и привели к появлению ООП, где данные и операции над ними объединены в объекты. На практике стили сочетают: процедурный код с небольшими функциями без глобального состояния остаётся вполне поддерживаемым.

