Предност и асоцијативност брзог оператора (са примерима)

У овом чланку ћете научити о правилима која се користе за процену израза помоћу оператора и операнда.

Предност брзог оператора

Приоритет оператора је скуп правила која се користе за процену датог математичког израза. Када се у једном изразу користи неколико оператора, сваки део се процењује одређеним редоследом који се назива приоритет оператора. Поједини оператори имају већи приоритет од других што утиче на то како се израз процењује.

Табела приоритета оператора

У табели испод наведена је предност оператора у Свифту. Што се више појављује у табели, то је већи његов приоритет.

Свифт стандардне библиотечке групе прецеденце (од највише до најниже)
Групе оператора Примери
Приоритет померања у битовима >> & <>>>
Предност множења & *% & * /
Приоритет додавања |. | & + & - + - ^
Предност формирања домета … <…
Цастинг Прецеденце је као
Нил-Цоалесцинг Прецеденце ??
Првенство поређења ! => = <= === ==
Предност логичке коњукције &&
Предност логичке дисјункције ||
Подразумевана предност ~>
Тернарно првенство ?:
Функција Предност стрелице ()
Преседанција додељивања | =% = / = & <> = & = * = >> = << = = + = - =

Пример 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 = испис (к) 29

Пример 2: Предност брзог оператора са сложеним оператором доделе

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

Када покренете горњи програм, излаз ће бити:

 19

У горњем примеру, израз var y = 15додељује вредност 15 променљивој и.

У следећем изразу y += 10 - 2 * 3оператор множења има већи приоритет од оператора одузимања и сложеног додељивања ( +=).

Стога се израз y += 10 - 2 * 3оцењује као y = y + (10 - (2 * 3)).

Кораци извршења
Кораци Оператор Израз Вредност враћена из израза
1 = вар и = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Удружење брзих оператера

Иако постоје унапред дефинисана правила која су дефинисана приоритетом оператора за процену израза, можда се питате шта се догађа ако постоји више оператора истог нивоа приоритета. Асоцијативност оператора дефинише како су оператори истог приоритета груписани заједно.

У Свифту, оператори могу бити или лево-асоцијативни, десни-асоцијативни или немају асоцијативност. Оператори који су лево асоцијативни, групишу своје операнде с леве стране израза, десни асоцијативни оператори с десне стране и оператори без асоцијативности немају дефинисано понашање када се користе у низу у изразу.

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

Табела у наставку приказује асоцијативност Свифт оператора заједно са приоритетом.

Свифт стандардна библиотечка асоцијативност (предност од највише до најниже)
Групе оператора Примери Асоцијативност
Приоритет померања у битовима >> & <>>> ниједан
Предност множења & *% & * / лево
Приоритет додавања |. | & + & - + - ^ лево
Предност формирања домета … <… ниједан
Цастинг Прецеденце је као ниједан
Нил-Цоалесцинг Прецеденце ?? јел тако
Првенство поређења ! => = <= === == ниједан
Предност логичке коњукције && лево
Предност логичке дисјункције || лево
Подразумевана предност ~> ниједан
Тернарно првенство ?: јел тако
Функција Предност стрелице () јел тако
Преседанција додељивања | =% = / = & <> = & = * = >> = << = = јел тако

Пример 3: Удружење брзих оператора

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

Када покренете горњи програм, излаз ће бити:

 200

У горњем програму израз се процењује слева надесно, јер оператори спадају у групе приоритета множења и има леву асоцијативност. Стога се операција дељења одвија раније и добијате резултат 200 . Шта ако прво желите да извршите множење? 2 * 10Израз треба да умотате у заграде () као:

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

Када покренете горњи програм, излаз ће бити:

 2

Не треба да памтите табелу приоритета и асоцијација. Већину времена предност и асоцијативност оператора имају смисла саме по себи. Табелу увек можете користити за референцу када сумњате. Такође, боље је користити заграде да бисте олакшали разумевање свог кода.

Занимљиви Чланци...