Урок №67. Оператори умовного розгалуження if/else

  Юрій  | 

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

 403

На цьому уроці ми розглянемо оператори умовного розгалуження if/else та те, як їх можна використовувати.

Умовні розгалуження if/else

Найпростішими умовними розгалуженнями в мові С++ є стейтменти if/else. Вони виглядають наступним чином:

if (вираз)
    стейтмент1

або

if (вираз)
    стейтмент1
else

    стейтмент2

вираз називається умовою (або “умовним виразом”). Якщо результатом виразу є true (будь-яке ненульове значення), то виконуватися буде стейтмент1. Якщо ж результатом виразу є false (0), то виконуватися буде стейтмент2. Наприклад:

Використання декількох операцій в розгалуженнях if/else

Оператор if виконує тільки одну операцію, якщо вираз є true, і також лише одну операцію else, якщо вираз є false. Щоб виконати декілька операцій поспіль, використовуйте блок стейтментів:

Неявне вказування блоків

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

if (вираз)
    стейтмент1
else

    стейтмент2

Буде виконуватися як:

if (вираз)
{

    стейтмент1
}
else
{

    стейтмент2
}

По суті, це не має значення. Однак початківці іноді намагаються зробити щось на кшталт наступного:

Програма не скомпілюється, і в підсумку ми отримаємо помилку, що ідентифікатор a не визначений. А станеться це через те, що програма буде виконуватися в такий спосіб:

У цьому контексті стає зрозумілим, що змінна a має локальну область видимості і знищується в кінці блоку, в якому вона ініціалізована. Але поки ми дійдемо до рядка з std::cout, то змінна a вже перестане існувати.

Поєднання стейтментів if

Стейтменти if/else можна поєднувати:

Вкладені розгалуження if/else

Одні стейтменти if можуть бути вкладені в інші стейтменти if:

Зверніть увагу, що у вищенаведеній програмі ми можемо спостерігати потенційну помилку двозначності оператора else. До якого if відноситься оператор else: до зовнішнього чи до внутрішнього?

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

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

Тепер зрозуміло, що оператор else відноситься до внутрішнього оператора if. Використання дужок також дозволяє явно вказати прив’язку else до зовнішнього оператора if:

Використовуючи блоки стейтментів, ми уточнюємо, до якого if слід прикріплювати певний else. Без блоків оператор else буде прикріплюватися до найближчого незакритого оператора if.

Використання логічних операторів в розгалуженнях if/else

Також ви можете перевірити відразу декілька умов в розгалуженнях if/else, використовуючи логічні оператори:

Основні використання розгалужень if/else

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

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

Розгалуження if/else також зазвичай використовують для виконання простих математичних операцій. Наприклад, розглянемо функцію min(), яка повертає мінімальне з двох чисел:

Ця функція настільки проста, що її можна переписати, використовуючи умовний тернарний оператор:

Нульові стейтменти

Також в мові C++ можна не вказувати основну частину оператора if. Такі стейтменти називаються нульовими стейтментами (або “null-стейтментами”). Оголосити їх можна, використовуючи крапку з комою замість виконуваної операції. З метою поліпшення читабельності коду, крапка з комою нульового стейтменту зазвичай пишеться з нового рядка. Таким чином, ми явно вказуємо, що хочемо використати null-стейтмент, зменшуючи ймовірність не помітити його використання:

Хоча нульові стейтменти рідко використовуються в поєднанні з оператором if, але, через необережність, це може призвести до проблем. Розглянемо наступний фрагмент коду:

У вищенаведеному прикладі ми випадково вказали крапку з комою в кінці оператора if. Ця необачність призведе до того, що код буде виконуватися наступним чином:

Попередження: Завжди перевіряйте, чи не “закрили” ви випадково оператор if крапкою з комою.

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

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (6 оцінок, середня: 5,00 з 5)
Loading...

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

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