Урок 64. Операторы условного ветвления if и else

   ⁄ 

 Обновлено 10 Июн 2017

  ⁄   

Самыми простыми условными ветвлениями в С++ являются стейтменты if. Они выглядят так:

if (expression)
    statement1

или так:

if (expression)
    statement1
else

    statement2

Expression (выражение, что находится в скобках) называется условием (или условным выражением). Если его значение — true (ненулевое), то выполняться будет statement1. Если результат условия – false (0), тогда выполняться будет statement2, если он вообще будет.

Пример программы с использованием ветвления if:

Использование нескольких операций в стейтменте if

Обратите внимание, оператор if выполняет только одну операцию, если выражение истинно, и else, в свою очередь, также выполняет только одну операцию, если выражение ложно. Чтобы выполнить несколько операций подряд — используйте блок стейтментов:

Неявное указание блоков

Если программист не объявил блок в основной части оператора if или else (не указал скобки), то компилятор неявно объявит его сам. Таким образом:

if (expression)
    statement1
else

    statement2

будет выполняться как:

if (expression)
{

    statement1
}
else
{

    statement2
}

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

Программа не скомпилируется, и в итоге мы получим ошибку, что идентификатор a не определен. А произойдет это из-за того, что программа будет выполняться как:

В этом контексте становится ясно, что переменная a имеет локальную область видимости и уничтожается в конце блока. Но до того времени, как мы дойдем до строки std::cout, переменной a уже не существует.

Соединение стейтментов if

Стейтменты if-else можно использовать в связке:

Вложенные стейтменты if

Одни стейтменты if могут быть вложены в другие стейтменты if:

Обратите внимание, в программе выше мы можем наблюдать потенциальную ошибку двусмысленности else. К чему относится оператор else: к внешнему или внутреннему if?

Ответ заключается в том, что оператор else всегда относится к последнему незакрытому оператору if в блоке, в котором находится сам else. То есть, в программе выше, else относится к внутреннему if.

Чтобы избежать таких вот неоднозначностей при вложенности операторов условного ветвления, рекомендуется использовать блоки стейтментов (указывать скобки). Например, та же программа, но уже без двусмысленности:

Теперь гораздо яснее, что оператор else принадлежит к внутреннему оператору if.

Использование скобок также позволяет явно указать привязку else к внешнему стейтменту if:

Используя блоки стейтментов, мы уточняем, к какому if должен прикрепляться какой else. Без них оператор else будет прикрепляться к ближайшему незакрытому оператору if.

Использование логических операторов в ветвлении if

Также вы можете проверять сразу несколько условий в ветвлении if, используя логические операторы:

Основные использования ветвления if

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

Также операторы if используют для преждевременных возвратов, когда функция возвращает управление вызывающему объекту (caller-у) до завершения выполнения самой функции. В программе ниже, если значение параметра — отрицательное, то функция сразу же возвращает в caller символьную константу или перечислитель в качестве кода ошибки.

Стейтменты if также обычно используются для выполнения простых математических операций, таких как функции min() или max(), которые возвращают минимальное или максимальное значение исходя из своих параметров:

Эта функция настолько проста, что её можно записать с помощью условного тернарного оператора (?:):

Стейтменты null

Также в C++ можно не указывать основную часть оператора if. Такие стейтменты называются нулевыми (или стейтменты null), объявить их можно, используя точку с запятой вместо выполняемой операции. В целях улучшения читабельности кода, точка с запятой нулевого стейтмента обычно пишется с новой строки. Таким образом, мы явно указываем, что хотим использовать стейтмент null, уменьшая вероятность не заметить его использования.

Хотя нулевые стейтменты редко используются в сочетании с оператором if, но из-за неосторожности это может привести к проблемам. Рассмотрим следующий фрагмент:

В примере выше мы случайно указали точку с запятой в конце оператора if. Эта неосмотрительность приведет к тому, что фрагмент кода будет выполняться как:

Предупреждение. Всегда проверяйте, не «закрыли» ли вы случайно оператор if точкой с запятой.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (7 оценок, среднее: 4,86 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *