View Categories

Условия

Условие - один из вариантов ветвления программы, то есть выполнения разных участков кода в зависимости от определённых условий.

Оператор 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, либо ни одна из них, иначе будет ошибка компиляции

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх