Пріоритет та асоціативність швидкого оператора (з прикладами)

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

Пріоритет швидкого оператора

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

Таблиця пріоритетів оператора

У таблиці нижче наведено перелік операторів у Swift. Чим вище воно відображається в таблиці, тим вище його пріоритет.

Swift Стандартні групи переваги бібліотеки (від найвищої до найнижчої)
Групи операторів Приклади
Побітовий пріоритет зсуву >> & <>>>
Пріоритет множення & *% & * /
Пріоритет додавання | & + & - + - ^
Пріоритет формування дальності … <…
Перевага кастингу є як
Превосходство з нульовим злиттям ??
Пріоритет порівняння ! => = <= === ==
Пріоритет логічного сполучника &&
Перевага логічної диз’юнкції ||
Пріоритет за замовчуванням ~>
Потрійне переважання ?:
Функція Стрілка пріоритет ()
Пріоритет призначення | =% = / = & <> = & = * = >> = << = = + = - =

Приклад 1: Перевага швидкого оператора

 let x = 4 + 5 * 5 print(x) 

Коли ви запускаєте вищезазначену програму, результат буде:

 29

У наведеному вище прикладі, якщо ви читаєте вираз зліва направо, ви можете очікувати, що результат буде 45. Але оператор множення має вищий пріоритет, ніж оператор додавання, тому вираз 4 + 5 * 5 оцінюється як 4 + (5 * 5). Тому print(x)виводить 29 на екран.

Етапи виконання
Кроки Оператор Вираз Значення, повернуте з виразу
1 * 5 * 5 25
2 + 4 + 25 29
3 = друк (x) 29

Приклад 2: Перевага швидкого оператора з оператором складного призначення

 var y = 15 y += 10 - 2 * 3 print(y) 

Коли ви запускаєте вищезазначену програму, результат буде:

 19

У наведеному вище прикладі вираз var y = 15присвоює значення 15 змінній y.

У наступному виразі y += 10 - 2 * 3оператор множення має вищий пріоритет, ніж оператор віднімання та складання ( +=).

Тому вираз y += 10 - 2 * 3оцінюється як y = y + (10 - (2 * 3)).

Етапи виконання
Кроки Оператор Вираз Значення, повернуте з виразу
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Асоціація швидких операторів

Хоча існують заздалегідь визначені правила, визначені пріоритетом оператора для оцінки виразу, можливо, вам цікаво, що трапиться, якщо є кілька операторів одного рівня пріоритету. Асоціативність оператора визначає, як оператори одного і того ж пріоритету групуються разом.

У Swift оператори можуть бути або ліво-асоціативними, право-асоціативними, або не мати асоціативності. Оператори, які мають ліву асоціацію, групують свої операнди зліва від оператора, правоасоціативні оператори праворуч та оператори без асоціативності не мають визначеної поведінки при послідовному використанні у виразі.

Таблиця асоціативності оператора

У таблиці нижче показано асоціативність операторів Свіфта разом із пріоритетом.

Світова стандартна бібліотечна асоціативність (перевага від найвищого до найнижчого)
Групи операторів Приклади Асоціативність
Побітовий пріоритет зсуву >> & <>>> жоден
Пріоритет множення & *% & * / зліва
Пріоритет додавання | & + & - + - ^ зліва
Пріоритет формування дальності … <… жоден
Перевага кастингу є як жоден
Превосходство з нульовим злиттям ?? правильно
Пріоритет порівняння ! => = <= === == жоден
Пріоритет логічного сполучника && зліва
Перевага логічної диз’юнкції || зліва
Пріоритет за замовчуванням ~> жоден
Потрійне переважання ?: правильно
Функція Стрілка пріоритет () правильно
Пріоритет призначення | =% = / = & <> = & = * = >> = << = = правильно

Приклад 3: Швидка асоціація операторів

 let x = 40 / 2 * 10 print(x) 

Коли ви запускаєте вищезазначену програму, результат буде:

 200

У наведеній вище програмі вираз обчислюється зліва направо, оскільки оператори потрапляють у групи пріоритетів множення і мають ліву асоціативність. Отже, операція ділення відбувається раніше, і ви отримуєте результат 200 . Що робити, якщо спочатку потрібно виконати множення? Вам потрібно обернути 2 * 10вираз у фігурні дужки () як:

 let x = 40 / (2 * 10) print(x) 

Коли ви запускаєте вищезазначену програму, результат буде:

 2

Не потрібно запам’ятовувати таблицю пріоритетів та асоціатив. Здебільшого переважність та асоціативність операторів мають сенс самі по собі. Ви завжди можете використати таблицю для довідки, якщо сумніваєтесь. Крім того, краще використовувати дужки, щоб полегшити розуміння коду.

Цікаві статті...