Ветвления
Last updated
Last updated
Логические операторы не могут самостоятельно управлять потоком выполнения программы, для этого используются ветвления. Все они устроены по одному принципу - входные данные приводятся к булю (true
или false
) и, в зависимости от результата этого значения, поток программы направляется в ту или иную ветку.
Входные данные, которые приводятся к булевому типу называются условием. Условие помещают за оператором if
в круглых скобках. Если условие приводится к true
, то выполняется код в фигурных скобках (ветка).
Если условие приводится к false
, код в фигурных скобках будет пропущен.
Расширяет синтаксис оператора if
тем, что в случае если условие приводится к false
, выполнится код в фигурных скобках после оператора else
.
При true
, оператор else
и связанный с ним программный блок, игнорируются.
Расширяет синтаксис оператора if...else
тем, что после else
снова добавляется оператор if
. На первый взгляд код из множества подобных вложений кажется сложным. На самом деле, все ответвления - это результат false
на все предыдущие вопросы.
При первом же true
проверки прекратятся и выполнится только один сценарий, соответствующий этому true
. Поэтому подобную запись следует читать как: ищу первое совпадение условия, игнорирую все остальное.
Есть конструкция, похожая на if...else
, с упрощенным синтаксисом, называемая тернарный оператор (ternary - тройной).
Такая конструкция работает следующим образом:
Вычисляется условие
Если условие истинно (true)
, вычисляется выражение после ?
, в противном случае значение после :
Результат вычисленного выражения возвращается
Перепишем пример используя тернарный оператор.
Запишем операцию поиска большего числа.
Код работает верно, получаем большее число из двух, но это решение кажется слишком громоздким, учитывая, насколько проста проблема. Что делать? Используем тернарный оператор.
Тернарный оператор должен использоваться в простых операциях присваивания или возврата. Его использование для описания сложных ветвлений — плохая практика (антипаттерн).
В некоторых случаях сложности чтения логических конструкций можно избежать, используя оператор ветвления switch
. Синтаксис этого оператора разбивает условие на общую часть switch
и множество отдельных случаев case
. Т.е. применимость этого оператора ограничена только задачами с одним общим вопросом и множеством вариантов ответов.
Значение выражения - строка или число, которое сравнивается со всеми значениями case
. Если совпадения не произошло, управление передается default
. Оператор break
в завершении каждого блока case
ставят чтобы прервать дальнейшие проверки и сразу перейти к коду за инструкцией switch
.
Если оператор break
будет отсутствовать, то после того как выполнится какое-то условие case
, все последующие за ним блоки кода будут выполняться один за другим, что может привести к нежелательным последствиям при неверном применении.