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

🔥 🚀 Важно для всех, кто работает с 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».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх