Javascript, умовні оператори

Умовні оператори дозволяють припустити або виконати інші оператори в залежності від значення зазначеного вирази. Ці оператори є точками прийняття рішень в програмі, і іноді їх також називають операторами «розгалуження».

Оператор if / else

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

Зверніть увагу, що дужки навколо умовного виразу є обов'язковою частиною синтаксису оператора if.

Друга форма оператора if вводить конструкцію else, яка виконується в тих випадках, коли вираз повертає помилкове значення. Її синтаксис:

Ця форма виконує оператор1, якщо вираз повертає істинне значення, і оператор2, якщо вираз повертає помилкове значення. наприклад:

Оператор else if

У цьому фрагменті немає нічого особливого. Це просто послідовність операторів if, де кожен оператор if є частиною конструкції else попереднього оператора.

оператор switch

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

Оператор switch призначений саме для таких ситуацій. За ключовим словом switch слід вираз в дужках і блок коду в фігурних дужках:

Однак повний синтаксис оператора switch складніший, ніж показано тут. Різні місця в блоці позначені ключовим словом case. за яким слід вираз і символ двокрапки.

Коли виконується оператор switch, він обчислює значення виразу, а потім шукає мітку case, що відповідає цьому значенню (відповідність визначається за допомогою оператора ідентичності ===). Якщо мітка знайдена, виконується блок коду, починаючи з першої інструкції, наступної за міткою case. Якщо мітка case з відповідним значенням не знайдено, виконання починається з першої інструкції, наступної за спеціальною міткою default :. Якщо мітка default: відсутній, блок оператора switch пропускається цілком.

Роботу оператора switch складно пояснити на словах, набагато зрозуміліше виглядає пояснення на прикладі. Наступний оператор switch еквівалентний повторюваним операторам if / else, показаним в попередньому прикладі:

Зверніть увагу на ключове слово break в кінці кожного блоку case. Оператор break призводить до передачі управління в кінець оператора switch і продовження виконання операторів, які слідують далі. Конструкції case в операторі switch задають тільки початкову точку виконуваного програмного коду, але не задають жодних кінцевих точок.

У разі відсутності операторів break оператор switch почне виконання блоку коду з міткою case, відповідної значенням вирази, і продовжить виконання операторів до тих пір, поки не дійде до кінця блоку. У рідкісних випадках це корисно для написання програмного коду, який переходить від однієї мітки case до наступної, але в 99% випадків слід акуратно завершувати кожен блок case оператором break. (При використанні switch всередині функції замість break можна використовувати оператор return. Обидва цих оператора служать для завершення роботи оператора switch і запобігання переходу до наступної мітці case.)

Нижче наводиться більш практичний приклад використання оператора switch, він перетворює значення в рядок способом, що залежать від типу значення:

Зверніть увагу, що в двох попередніх прикладах за ключовими словами case слідували числа або рядкові літерали. Саме так оператор switch найчастіше використовується на практиці, але стандарт ECMAScript дозволяє вказувати після case довільні вирази.

Оператор switch спочатку обчислює вираз після ключового слова switch, а потім вираження case в тому порядку, в якому вони вказані, поки не буде знайдено збігається значення. Факт збігу визначається за допомогою оператора ідентичності ===, а не за допомогою оператора рівності ==, тому висловлювання повинні збігатися без будь-якого перетворення типів.

Оскільки при кожному виконанні оператора switch обчислюються не всі вирази case, слід уникати використання виразів case, що мають побічні ефекти, такі як виклики функцій і присвоювання. Найбезпечніше обмежуватися в виразах case константними виразами.

Як пояснювалося раніше, якщо жодне з виразів case не відповідає вираженню switch, оператор switch починає виконання оператора з міткою default. Якщо мітка default: відсутній, тіло оператора switch повністю пропускається. Зверніть увагу, що в попередніх прикладах мітка default: вказана в кінці тіла оператора switch після всіх міток case. Це логічне і просте місце для неї, але насправді вона може розташовуватися в будь-якому місці всередині оператора switch.

Тернарний оператор.

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

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

Ця перевірка еквівалентна наступній конструкції if, але більш компактна:

Схожі статті