🔥 🚀 Важно для всех, кто работает с Java! 🔥
На JavaRocks ты найдешь уникальные туториалы, практические задачи и редкие книги, которых не найти в свободном доступе. Присоединяйся к нашему Telegram-каналу JavaRocks — стань частью профессионального сообщества!
Привет! Сегодня поговорим о том, что такое тернарный оператор.

“Тернарный” значит “состоящий из трех частей”. Это альтернатива уже знакомой нам условной конструкции if-else.
Рассмотрим на примере. Допустим, кто-то приходит на фильм с возрастным ограничением 18+ и нам нужно проверить возраст. Объявим класс 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Логика проста: проверяется одно условие (возраст >= 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Немного о синтаксисе
Оператор называется тернарным, потому что в нем 3 компонента:
- Одно условие
(person.getAge() > 18) - Два возможных исхода (“Everything is in order. Come in!” и “This film is not suitable for your age!”).
Сначала мы пишем условие, а затем ставим знак вопроса, как бы спрашивая: “Возраст этого человека больше 18 лет?”.
person.getAge() > 18 ?Далее записываем первое значение. Его присвоит переменная, если условие будет верным (true)
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"Далее следует символ “:” и второе значение, которое используется, если условие оказывается ложным:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";Иными словами, мы говорим программе:
Возраст этого человека больше 18 лет? Если да, в переменную usherResponse устанавливаем значение “Everything is in order. Come in!”. Если нет, устанавливаем значение “This film is not suitable for your age!”.
Вот как схематично выглядит логика тернарного оператора: “условие ? исход 1 : исход 2”

Кстати, круглые скобки вокруг условия не обязательны: в коде выше мы добавили их для большей читабельности. Можно спокойно обходиться без них:
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);
}Что лучше использовать?
Конструкцию if-else или тернарный оператор?
С точки зрения производительности разницы почти нет. Главное – читабельность кода, особенно при работе в команде. Если условие простое, можно спокойно использовать тернарный оператор. Это позволит сократить объем кода и количество if-else, которых может быть очень много. Если же условие сложное, использование троичного оператора будет плохой идеей:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";Код стало очень трудно читать, потому что не сразу можно понять, что здесь происходит. Правила такие: в зрительный зал на фильм может войти человек старше 18 лет при условии наличия билета и отсутствия детей. Если какая-то часть условия ложна, человека не пропустят. Конечно в таком случае лучше использовать if-else.
Раз мы затронули проблему читабельности кода, стоит порекомендовать книгу Роберта Мартина “Чистый код”, ставшую классикой для программистов. В ней собраны лучшие рекомендации, которые помогут при создании не только функционального, но и удобочитаемого кода.
Перевод статьи «Java Ternary operator».
