CodeGym /Java блог /Случаен /Тернарен оператор
John Squirrels
Ниво
San Francisco

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

Публикувано в групата
здрасти Днешният урок няма да е много дълъг, но със сигурност ще бъде полезен :) Ще говорим за така наречения троичен оператор . Тернарен оператор - 1Тернарен означава „ съставен от три части “. Това е алтернатива на if-elseизраза за контролен поток, който вече сте срещали. Да дадем пример. Да предположим, че някой е решил да отиде на филм с рейтинг R (под 17 години се изисква придружаващ родител or възрастен настойник). Портиерът проверява възрастта му на вратата: ако е преминал проверката на възрастта, той има право да влезе; ако не, той се изпраща у дома. Нека декларираме 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);

   }
}
Конзолен изход:

"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!";
       }
Логиката тук е много проста: проверява се едно condition (възраст >= 18) Въз основа на резултата на променливата usherResponseсе присвоява един от два низа с отговора на разпоредителя. Такива ситуации („едно condition – два възможни изхода“) са изключително често срещани в програмирането. И затова е създаден троичният оператор. Можем да го използваме, за да опростим нашата проверка до един ред code:

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);

}
Ето How работи този оператор. Нарича се троичен оператор, защото включва 3 компонента:
  • Едно condition ( person.getAge() > 18)
  • Два възможни изхода ( „Всичко е наред. Заповядайте!“ и „Този ​​филм не е подходящ за вашата възраст!“ )
Първо пишем conditionто, последвано от въпросителен знак.

person.getAge() > 18 ?
„Повече от 18 години ли е този човек?“ След това записваме първата стойност . Тази стойност се използва, ако conditionто се оценява наtrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Възрастта на този човек повече от 18 ли е? Ако да, задайте usherResponse променливата на "Всичко е наред. Влезте!" Следва :символът " " и втората стойност . Тази стойност се използва, ако conditionто се оценява наfalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Възрастта на този човек повече от 18 ли е? Ако да, задайте usherResponse променливата на "Всичко е наред. Влезте!" . Ако не, задайте usherResponse променливата на "Този филм не е подходящ за вашата възраст!" Най-общо ето How изглежда логиката на троичния оператор. condition? резултат 1 : резултат 2 Тернарен оператор - 2 Между другото, скобите около conditionто не са задължителни: добавихме ги за по-голяма четливост. Работи и без тях:

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);

}
И така, Howво трябва да използвате? Изявление if-elseor троичен оператор? По отношение на производителността няма разлика. По-точно, може би има, но е незначително. Най-голямото внимание тук е четливостта на вашия code. Кодът, който пишете, трябва не само да работи правилно, но и да бъде лесен за четене . В крайна сметка може да е "наследен" от други програмисти, ваши колеги! Ако е трудно за разбиране, това ще усложни тяхната и вашата работа (те ще дотичат при вас за обяснения на всеки 5 minutesи). Общата препоръка е следната: ако conditionто е просто и лесно се проверява, можете да използвате троичния оператор без вреда. Това ви позволява да намалите количеството code и броя наif-elseтвърдения (и може вече да има много от тях). Но ако conditionто е сложно и включва множество стъпки, по-добре е да използвате if-elseизявление. Например използването на троичен оператор би било лоша идея в този случай:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Не е веднага ясно Howво се случва тук! Кодът стана много труден за четене. И всичко това заради сложното състояние:
  • Ако някой е над 18 години, има билет (or безплатен пропуск) и няма малки деца, може да влезе.
  • Ако дори една част от conditionто е невярна, тогава той не може.
Тук очевидно е по-добре да използвате if-else. Да, нашият code ще бъде по-голям, но ще бъде много по-четим. И вашите колеги няма да се сблъскат с длан, ако наследят този code :) И накрая, мога да ви препоръчам нещо добро. По време на урока засегнахме четимостта на codeа. На тази тема е посветена превърналата се в класика книга на Робърт Мартин "Чист code". Тернарен оператор - 4Той обединява най-добрите практики и препоръки за програмисти, които ще ви помогнат да пишете code, който е не само функционален, но и лесен за четене.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION