Условие - один из вариантов ветвления программы, то есть выполнения разных участков кода в зависимости от определённых условий.
Оператор if-else #
Самый простой вариант - условный оператор if
. Он принимает логическое выражение и выполняет указанный код, если это выражение - true
. У всех подобных конструкций есть два варианта:
- Всегда можно указать блок кода, который выполнится после оператора
- Если это одна инструкция - можно записать её напрямую, без блока
if (выражение) инструкция;
if (выражение) {
инструкция;
инструкция;
}
// пустая инструкция - ничего не произойдёт, но и ошибки не будет
if (выражение);
Если выражение true
- выполнится инструкция, если нет - то нет.
Например, если температура выше 30 градусов - включить лампочку:
if (temp > 30) lampOn();
Так как оператор принимает логическое выражение, то любая целочисленная переменная, отличная от нуля, является для него true
, и только ноль - false
. Например if (50)
выполнится
А как выключить лампочку, если температура ниже? Здесь поможет оператор else
- он выполнит код, если выражение в if
ложно:
if (выражение) инструкция1; // если true
else инструкция2; // если false
if (выражение) {
инструкция;
инструкция;
} else {
инструкция;
инструкция;
}
Тот же абстрактный пример с лампочкой:
if (temp > 30) lampOn();
else lampOff();
Если нужно обработать несколько промежуточных условий - есть конструкция else if
:
if (выражение1) инструкция1;
else if (выражение2) инструкция2;
else if (выражение3) инструкция3;
// ....
else инструкция4;
if (выражение1) {
инструкция;
инструкция;
} else if (выражение2) {
инструкция;
инструкция;
} else {
инструкция;
инструкция;
}
- Процессор будет проверять все условия, пока не дойдёт до результата
true
- после выполнения его инструкций остальные условия проверяться уже не будут - Если процессор нигде не получит результат
true
- будет выполнен код вelse
else
может отсутствовать
Тернарный оператор #
Для написания более компактных условных конструкций существует тернарный оператор ?
:
условие ? выражение1 : выражение2;
В данном коде проверяется условие
, если оно верно - вся конструкция возвращает выражение1
, если неверно - выражение2
. Например: если первое число больше второго - вернуть 0, если меньше - 1:
int res;
res = (a > b) ? 0 : 1;
// аналогичная конструкция с if
if (a > b) res = 0;
else res = 1;
Тернарные операторы можно вкладывать друг в друга для создания более разветвлённой логики. Например: если два числа равны - вернуть 0, если первое больше второго - вернуть 1, если второе больше первого - вернуть 2:
int res;
res = (a == b) ? 0 : ((a > b) ? 1 : 2);
// аналогичная конструкция с if-else
if (a == b) res = 0;
else if (a > b) res = 1;
else res = 2;
Да, код хуже читается, но он сильно компактнее и умещается в одну строчку. Не жалеем логических скобок и всё будет отлично.
Тернарный оператор также может использоваться самостоятельно, например для вызова функций по условию - такая конструкция выходит компактнее и читается не хуже, чем обычный if-else
:
(a > b) ? foo() : bar();
Важный момент - функции должны либо все возвращать void
, либо ни одна из них, иначе будет ошибка компиляции