Поток управления

Оригинальное название: control flow

Коротко

Порядок, в котором выполняются команды программы: подряд, с ветвлением по условию, по кругу в цикле, с переходом в функцию и возвратом из неё.

Что такое «Поток управления»

По умолчанию код выполняется сверху вниз, строка за строкой. Всё интересное начинается, когда этот порядок нарушается: условие отправляет выполнение в одну из веток, цикл возвращает его назад, вызов функции уводит в другое место и потом возвращает обратно, исключение выбрасывает сразу через несколько уровней вызовов. Совокупность этих переходов и называют потоком управления. Его можно нарисовать как граф: блоки кода — вершины, возможные переходы — стрелки. Так поступают компиляторы и анализаторы, когда ищут недостижимый код или пути, на которых переменная остаётся пустой.

Из чего складывается

  • Последовательность — обычные команды подряд.
  • Ветвление: if, switch, match, тернарный оператор.
  • Повторение: for, foreach, while, а также рекурсия.
  • Переходы: return, break, continue, исключения.
  • Асинхронность: в JavaScript колбэк или await продолжает выполнение позже, когда придёт ответ сервера.

Пример: ранний выход вместо вложенности

Один и тот же поток управления можно записать запутанно или ясно. Вложенные условия заставляют держать в голове несколько уровней:

function can_checkout( $cart, $user ) {
    if ( ! $user ) {
        return false;
    }
    if ( $cart->is_empty() ) {
        return false;
    }
    return $cart->total() >= MIN_ORDER;
}

Каждая проверка с ранним возвратом отсекает один неудачный путь, и к последней строке читатель приходит, уже зная, что пользователь есть и корзина не пуста. Такой приём называют защитными условиями.

Как поток управления помогает при отладке

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

Обновлено:

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

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