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

  Юрій  | 

  Оновл. 13 Січ 2021  | 

 276

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

Оператор sizeof

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

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

Тоді ми використовували його для визначення розміру конкретних типів даних. Але також 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 Зірок (5 оцінок, середня: 5,00 з 5)
Loading...

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

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