🔥 🚀 Важно для всех, кто работает с Java! 🔥
На JavaRocks ты найдешь уникальные туториалы, практические задачи и редкие книги, которых не найти в свободном доступе. Присоединяйся к нашему Telegram-каналу JavaRocks — стань частью профессионального сообщества!
В этой статье мы разберёмся, что такое тернарный оператор в Java и как с ним работать.
Тернарный — значит «состоящий из трёх частей». В Java тернарный оператор — это лаконичная замена обычному if-else
.
Рассмотрим пример. Допустим, кто-то решил пойти на фильм с рейтингом R (для лиц младше 17 лет требуется сопровождение взрослого). Билетер проверяет возраст на входе: если возраст подходит — пускает, если нет — отправляет домой.
Объявим класс Person
и реализуем такую проверку через if-else
:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
Run CodeВот что выведет программа:
"Everything is in order. Come in!"
Без вывода в консоль проверка выглядит так:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
Run CodeЛогика максимально проста: есть одно условие (age >= 18), и в зависимости от него переменной usherResponse
присваивается одна из двух фраз — либо пускаем, либо разворачиваем домой.
Такие ситуации («одно условие — два варианта ответа») в программировании встречаются постоянно. Именно длятаких случаев и был создан тернарный оператор — с его помощью такую проверку можно сократить до одной строки кода:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
Run CodeВот как работает тернарный оператор. Он называется тернарным, потому что состоит из трёх частей:
- Одно условие (
person.getAge() > 18
) - Два возможных ответа (
"Everything is in order. Come in!"
и “This film is not suitable for your age!"
)
Сначала записывается условие, потом следует знак вопроса (?
).
person.getAge() > 18 ?
Run CodeВопрос звучит так: “Возраст этого человека больше 18 лет?”
Затем указываем первое значение — оно используется, если условие выполнено (true
):
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Run CodeЕсли возраст человека больше 18, тогда переменная usherResponse
получит значение "
.После этого ставим двоеточие (Everything is in order. Come in!
":
) и указываем второе значение — оно подставляется, если условие ложно (false
):
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Run CodeЕсли человеку больше 18 лет, то переменной usherResponse
присваивается строка "
. В противном случае — Everything is in order. Come in!
""
.This film is not suitable for your age!
"
Общая схема работы тернарного оператора выглядит так: условие ? результат_если_да : результат_если_нет
(см. рис.)

Обратите внимание: скобки вокруг условия не обязательны — мы добавили их для лучшей читаемости. Оператор работает и без них:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
Run CodeИтак, что же стоит использовать? Оператор if-else
или тернарный оператор?
С точки зрения производительности особой разницы нет. Хотя, возможно, она и существует, но она настолько мала, что на неё можно не обращать внимания.
Самое важное здесь — это читаемость кода.
Написанный вами код должен не только правильно работать, но и быть легким для восприятия. Вдруг его будут читать другие программисты, например, ваши коллеги! Если код сложно понять, это усложнит не только их работу, но и вашу тоже — к вам за объяснениями будут бегать каждые 5 минут.
Основной совет: если условие простое и легко проверяемое, можно смело использовать тернарный оператор. Это поможет уменьшить объем кода и количество операторов if-else
(которые и так могут быть в коде в избытке).
Но если условие сложное и включает несколько шагов, лучше использовать оператор if-else
. Например, в этом случае тернарный оператор — не лучший вариант:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Run CodeЗдесь не сразу понятно, что происходит, и код стал трудным для чтения. И все из-за сложного условия:
- Если человек старше 18 лет, имеет билет (или бесплатный пропуск) и не имеет маленьких детей, он может войти.
- Если хотя бы одно из этих условий не выполнено, то ему не разрешат войти.
Здесь явно лучше использовать оператор if-else
. Да, код увеличится в размере, но он станет проще для восприятия. И ваши коллеги не будут разочарованы, если им придется работать с этим кодом 🙂
А на тему читаемости кода можем посоветовать прочитать книгу Роберта Мартина “Чистый код”. В ней собраны лучшие практики и рекомендации для программистов, которые помогут писать не только функциональный код, но и понятный для других.

Перевод статьи «Java Ternary operator».