Теренни оператори срещу изявления if-else

Вероятно сте виждали терминален оператор (известен също като условен израз) преди в изходен файл или някъде другаде. В C и на много език с подобен синтаксис използваме? символ за представяне на този оператор.

Повечето начинаещи (по моя опит) ми е малко трудно да разберат този оператор, въпреки че вече са усвоили изявленията if и else. Вярвам, че причината за това е, че е малко трудно да се чете и пише, защото провеждането на различни операции в един и същ ред може да бъде объркващо. Наистина ли.

Най-вероятно вече знаете как да ги използвате или поне, как да четете и разбирате логиката зад тях. В случай, че нямате, може би ще ви помогне следното „красиво“ ASCII изобразително изкуство, което току-що направих за вас, момчета.

       да
   __ __ __ __
  | |
  | |
  | ^
състояние? вярно невярно
  | ^
  | |
  | __ __ __ __ __ __ __ |
         не

Тройният оператор взема три аргумента. Първото (1-во) е условието, второто (2-ро) се изпълнява, ако условието е вярно, а третото (3-то) се изпълнява, ако условието е невярно.

По думите на обикновения човек, това е просто {if-else} изявление в един (1) ред!

Кога да ги използвам?

Лично аз ги използвам, когато искам да задам стойност на променлива, в зависимост от условието. Например, нека кажем, че ако x == 42, искам променливата y да е True. Ако x не е равно на 42, тогава стойността на променливата y е False.

И така, как да напиша това? Просто така…

bool y = (x == 42)? вярно невярно;

Лесно! Опитайте сами. Също така, тук е Python версията, само защото:

y = "True", ако x == 42 else "False"

Какво ще кажете за изявление if-else?

В този случай бих спорил и съм против. Защо? Разгледайте този код:

bool y;
ако (x == 42) {
  y = вярно;
}
друго {
  y = невярно;
}

За да го „преведем“ на терминален оператор, бихме го направили по следния начин:

? -> ако (x == 42) {}
y -> вярно;
: -> друго {}
y -> false;

Така че можем да имаме нещо подобно, ако приемем, че искате да е в един ред:

bool y; ако (x == 42) {y = true;} else {y = false;}

Което е грозно и ненужно, защото можем да го напишем така:

bool y = (x == 42)? вярно невярно;

Виждаш ли? Толкова по-чиста! Намалихме седем (7) реда код до само един (1) ред. :)

Кога трябва да го избягвам?

Тенарните оператори са страхотни, но не винаги са необходими. Да предположим, че просто искате да изпълните функция или да извършите множество операции ... не използвайте тернари.

Кой предпочиташ?

ако (x == 42) {
  std :: cout << "код се изпълнява" << std :: endl;
  код ();
}
друго {
  std :: cout << "нищо не се случи" << std :: endl;
}

срещу

(x == 42)? ((std :: cout << "код е изпълнен" << std :: endl), code ()): (void) (std :: cout << "нищо не се случи" << std: endl);

Да, сега е лесно да разберем защо.

заключение

  • Използвайте тройни оператори, за да зададете стойност на променлива или да намалите кода, ако е необходимо.
  • Използвайте if-else изявления за всичко останало.