Тернарна операція дозволяє скоротити запис умовної конструкції if ... else
і найкраще підходить до ситуацій, коли необхідно обрати два різних значення в залежності від однієї умови.
Синтаксис тернарного оператору наступний:
умова ? інструкція 1 : інструкція 1
Якщо умова
істинна, то виконається інструкція 1
, інакше (умова хибна), виконається інструкція 2
.
Приклад 1. Присвоїти змінній y значення 10, якщо x>0, та 1, в інших випадках.
Розв’язання за допомогою умовної конструкції if ... else
буде мати наступний вигляд:
1 2 3 4 5 6 7 |
if (x > 0) { y = 10; } else { y = 1; } cout << "y = " << y << endl; |
За допомогою тернарної операції код програми можна скоротити:
1 2 |
y = (x > 0) ? 10 : 1; cout << "y = " << y << endl; |
Приклад 2. Дано два різних цілих числа a і b. Вивести більше з них.
Розв’язання за допомогою умовної конструкції if ... else
:
1 2 3 4 5 6 |
if (a > b) { cout << a; } else { cout << b; } |
Розв’язання за допомогою тернарної операції:
1 |
(a > b)? cout << a : cout << b; |
Тернарний оператор може бути вкладеним:
Приклад 3. З’ясувати знак числа a.
Розв’язання за допомогою тернарної операції:
1 |
(a > 0)? cout << "a - додатнє ": (a < 0)? cout << "a - від'ємне ": cout << "a = 0 "; |
В цьому випадку код стає важким для розуміння. Тому краще замінити його на конструкцію if ... else
:
1 2 3 4 5 6 7 8 9 |
if (a > 0) { cout << "a - додатнє "; } else if (a < 0) { cout << "a - від'ємне "; } else { cout << "a = 0 "; } |
Використання тернарного оператору не завжди є гарним стилем програмування. В тих випадках, коли використвується складна логіка, переваги тернарного оператора – компактність коду і простота розуміння, втрачаються.
В більшості випадків тернарний оператор можна замінити на умовну констркцію if ... else
, але у деяких ситуаціях можливе використання тільки тернарного оператора. Наприклад, ініціалізувати константу в залежності від значення деякого виразу:
1 |
const int x = (a<b) ? b : a; |
Аналогічний запис за допомогою конструкції if ... else
викличе помилку.