Урок №44. Умовний тернарний оператор, оператор sizeof і Кома

  Оновл. 4 Вер 2021  | 

 5092

На цьому уроці ми розглянемо умовний тернарний оператор, оператор Кома і згадаємо оператор sizeof в мові C++.

Оператор sizeof

Ми вже розглядали оператор sizeof на уроці №33.

Оператор Символ Приклад Операція
sizeof sizeof sizeof(тип)
sizeof(змінна)
Повертає розмір типу даних або змінної в байтах

Тоді ми використовували його для визначення розміру конкретних типів даних. Але оператор sizeof також можна використовувати і зі змінними:

Оператор Кома


Оператор Кома (або “оператор Comma”) дозволяє обчислювати декілька виразів (в той час як допускається тільки один).

Оператор Символ Приклад Операція
Кома , x, y Обчислюється x, потім обчислюється y, а потім повертається значення y

Вираз, в якому знаходиться цей оператор, матиме значення правого операнду, наприклад:

Змінній z присвоюється результат обчислення ++у (правого операнду), що дорівнює 3.

Майже в кожному випадку, стейтмент, в якому є оператор Comma, краще записувати у вигляді окремих інструкцій. Вищенаведений код коректніше буде записати наступним чином:

Зверніть увагу, оператор Comma має найнижчий пріоритет з усіх операторів (навіть нижче, ніж в оператора присвоювання). Через це, наступні два рядки коду виконують не одне і те ж:

Більшість програмістів не використовують оператор Comma взагалі (хіба що тільки в циклах for).

Зверніть увагу, кома, яка використовується у викликах функцій, не є оператором Comma:

Аналогічно, при оголошенні декількох змінних в одному рядку, кома використовується як роздільник, а не як оператор:

Правило: Уникайте використання оператора Comma (винятком є використання в циклах for).

Умовний тернарний оператор

Умовний (тернарний) оператор (?:) — це єдиний тернарний оператор в мові С++, який працює з трьома операндами. Через це його часто називають просто тернарний оператор.

Оператор Символ Приклад Операція
Умовний ?: c ? x : y Якщо змінна c є ненульовим значенням (true), то обчислюється x, в іншому випадку — обчислюється y

Оператор ?: є скороченим способом (альтернативою) розгалуження if/else.

Стейтменти if/else:

if (умова)
   вираз;
else
   інший_вираз;

можно записати як

(умова) ? вираз : інший_вираз;

Зверніть увагу, операндами умовного оператора повинні бути вирази (а не стейтменти).

Наприклад, розгалуження if/else, яке виглядає наступним чином:

if (умова)
   x = значення1
else
   x = значення2

можна записати як

x = (умова) ? значення1 : значення2;

Більшість програмістів надає перевагу останньому варіанту, так як він читабельніший.

Ще один приклад. Щоб визначити, яке значення помістити у змінну larger, ми можемо зробити так:

Або ось так:

Зазвичай, частину з умовою поміщають всередині дужок, щоб переконатися, що пріоритет операцій збережено і також так зручніше читати.

Пам’ятайте, що оператор ?: має дуже низький пріоритет, через що його потрібно записувати в круглих дужках.

Наприклад, для виводу х або у ми можемо зробити наступне:

Або за допомогою тернарного оператора:

Давайте розглянемо, що відбудеться, якщо ми не помістимо в дужки весь умовний оператор у вищенаведеному випадку. Оскільки оператор << має більший пріоритет, ніж оператор ?:, то наступний стейтмент (де ми не помістили весь тернарний оператор в круглі дужки, а лише умову):

Буде оброблюватися як:

Таким чином, в консольному вікні ми побачимо 1 (true), якщо х > у, в іншому випадку — виведеться 0 (false).

Порада: Завжи поміщайте в круглі дужки умовну частину тернарного оператора, а краще взагалі весь тернарний оператор.

Умовний тернарний оператор — це зручне спрощення розгалуження if/else, особливо при присвоюванні результату змінної або поверненні певного значення. Але його не слід використовувати замість складних розгалужень if/else, оскільки в таких випадках читабельність коду різко погіршується і ймовірність виникнення помилок тільки зростає.

Правило: Використовуйте умовний тернарний оператор тільки в тривіальних випадках.

Умовний тернарний оператор обчислюється як вираз


Варто відзначити, що умовний оператор обчислюється як вираз, в той час як розгалуження if/else обчислюються як набір стейтментів. Це означає, що тернарний оператор ?: може використовуватися там, де if/else застосувати неможливо, наприклад, при ініціалізації константи:

Тут не можна застосувати if/else, так як константи повинні бути ініціалізовані при оголошенні, а стейтмент не може бути значенням для ініціалізації.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (69 оцінок, середня: 4,99 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *