Процедурное программирование

Оригинальное название: 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.

Сильные и слабые стороны

  • Легко начать и легко прочитать короткий код: видно, что за чем выполняется.
  • Нет лишних слоёв — для скриптов, миграций данных и консольных утилит этого достаточно.
  • С ростом проекта данные и функции, которые их меняют, расходятся по разным файлам. Глобальные переменные начинают менять из десятка мест, и становится непонятно, кто испортил значение.
  • Добавить новый вариант поведения часто значит дописать ветку в каждой функции.

Последние два пункта и привели к появлению ООП, где данные и операции над ними объединены в объекты. На практике стили сочетают: процедурный код с небольшими функциями без глобального состояния остаётся вполне поддерживаемым.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение