Условия

Иногда программа действует “в лоб” – просто выполняя операции друг за другом. Но гораздо чаще нужны программы, которые умеют делать проверки. Такие программы выбирают, как себя повести, в зависимости от условий: состояние внешней среды, выбор пользователя, сохранённые значения переменных и так далее. Условия в Java имеют три реализации, которые мы рассмотрим в этой статье: if-then-else оператор, тернарный оператор (ternary operator) и switch-case конструкция.

Операторы сравнения

Перед тем, как начать всюду использовать условия, нужно осознать, как именно сравнивать, и что сравнивать между собой.

Операторы сравнения в Java, да в и других языках программирования, используются для сравнения значений переменных (или прямых значений, например, просто 4) и возвращают логическое значениеtrue (истина) или false (ложь). Результат зависит от того, выполняется указанное условие или нет. Например, сейчас 1970 год? Ответ – false (ложь). В коде сравнение можно изобразить примерно так:

Это непосредственно сравнение. Как видите, для сравнения используется не одно равно, а целых два. Дело в том, что одно равно используется для присваивания переменным значений, а два – для сравнений. Ведь это разные операции, так что их сферы влияния пришлось разграничить. Посмотрим, какие есть операторы сравнения:

  • == – равно. Проверка, равны ли два значения;
  • != – не равно. Проверяется, не совпадают ли два значения;
  • > – больше. Узнаём, больше ли левое значение, чем правое;
  • < – меньше;
  • >= – больше или равно. Позволяет понять, если левое значение не меньше, чем правое;
  • <= – меньше или равно.

Других операторов сравнения в Java нет – знать нужно только эти 6.

If-then-else

Один из наиболее базовых способов реализации условий в Java – использование оператора if-then-else. Блок if определяет проверяемое условие, then – это блок кода для выполнения, если условие выполнено, а else – блок кода, который нужно выполнить, если условие не выполнено. Блок else необязателен, то есть, если при невыполнении условия не нужно чего-либо предпринимать, можно не писать пустой блок else, а просто его опустить. Синтаксис для двух этих вариантов следующий:

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

Как видно, результат выполнения программы зависит от того, что введёт пользователь в переменную age, и здесь есть два варианта развития событий: пиво получено или не получено. Условия бывают и более сложными, когда вариантов развития – множество.

Скриншот консоли IntelliJ IDEA с выводом одобрения возраста 20 для пива
Скриншот консоли IntelliJ IDEA с выводом неодобрения возраста 14 для пива

Если вы хотите проверить два условия в if, или больше, тогда можно воспользоваться так называемыми логическими операторами. Их в Java всего 2: “и” (&&), “или” (||).

Опробуем логическое “и” (&&). Условие будет верным только если оба выражения истинны (true). Для проверки, что сегодня 14-е число и 2-ой месяц, условие будет выглядеть так:

Если же сегодня 14-е число, но не 2-ой месяц, или наоборот, условие будет не выполнено (false). Код в теле блока if выполняться не будет.

Познакомимся с логическим “или” (||). Условие верно, если хотя бы одно из выражений истинно (true). Проверка, что введённый символ равен ‘F’ или ‘D’:

Теперь попробуем написать более сложное условие, состоящее из четырёх под-условий. Например: хотим выяснить, работает ли сейчас пиццерия. Её рабочее время: 09:00-23:00, однако она ещё прерывается на обед с 13:00 до 14:00. Тогда условие проверки, работает ли она в конкретный час, будет выглядеть так:

Для отделения связки условий используются скобки, как для (currentHour < 13 || currentHour > 14). Таким образом, 2 под-условия в скобках будут учтены в совокупности, а не по отдельности. Нам просто нужно, чтобы текущий час был меньше 13-ти либо больше 14-ти. Однако нам неважно, первое ли истинно под-условие, или второе. Поэтому здесь логическое “или”.

Но обязательно, чтобы час работы был больше либо равен 9, и, в то же время, меньше либо равен 23. Поэтому логическое “и”. Также сейчас не должно быть время перерыва. Это учтено в скобках (currentHour < 13 || currentHour > 14). Поэтому результат этих скобок также добавляем к общему условию при помощи логического “и”.

Правда, лучше такие огромные условия не городить.

Тернарный оператор

Тернарный оператор в Java позволяет компактно записать условие с двумя вариантами значений в результате. Его синтаксис:

Он подойдёт в тех случаях, когда нужно выбрать между двумя значениями. Однако для больших блоков выполняемого кода в случае срабатывания одного из условий он не подходит. Приправим теорию примером, переформулировав тот, что уже был на if-then-else в новый с использованием тернарного оператора:

Изменений в коде произошло немного. Изменений в работе программы – ноль. Всё выполняется и выводится ровно так же. Но разница – в записи кода.

Тернарный оператор порой выглядит элегантнее, чем запись if-then-else, но это только в отдельных случаях. Обычно блок if-then-else гораздо проще читается, а это важно – читаемость кода. Кому-то же его потом читать.

Switch-case

Switch-case конструкция используется для проверки одной переменной на несколько возможных значений – множество разветвлений. В Java она имеет следующий вид:

В скобки switch-а проставляется значение или выражение, в зависимости от которого будет выбрана дорожка, по которой пойти. Case-ы – это и есть такие дорожки. Рядом с ключевым словом case пишется одно из значений, а затем в блоке case-а располагается код, который выполняется в случае, если исходное значение или выражение равно тому значению, которое задано в этом case.

Есть один нюанс. В конце тела каждого case-а в коде выше написан оператор break. Он прерывает выполнение оператора. Если break не прописать, то при совпадении со значением из первого case-а, программа выполнит всё его тело, а потом не выйдет из switch-а, а продолжит выполнять код всех остальных case-ов подряд, пока не наткнётся на break.

Создадим пример, где пользовательскому взору предстаёт нехитрое меню из трёх пунктов. В силу того, пользователь волен самостоятельно выбирать желаемый путь развития событий.

Причём значение, которое пишется справа от каждого case-а, обязательно должно быть константой. Например, как в коде выше – числа.

Результаты выполнения:

Скриншот консоли IntelliJ IDEA с выводом меню switch-case и шуткой-прибауткой
Скриншот консоли IntelliJ IDEA с выводом меню switch-case и выбором некорректного пункта

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

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