Приоритет и асоциативност на бързия оператор (с примери)

В тази статия ще научите за правилата, използвани за оценка на израз с оператори и операнди.

Приоритет на бързия оператор

Приоритетът на оператора е колекция от правила, използвани за оценка на даден математически израз. Когато в един израз се използват няколко оператора, всяка част се оценява в определен ред, наречен приоритет на оператора. Някои оператори имат по-висок приоритет от други, което влияе върху начина на оценяване на даден израз.

Таблица за приоритет на оператора

Таблицата по-долу изброява предимството на операторите в 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 операторите могат да бъдат или ляво асоциативни, десни асоциативни или да нямат асоциативност. Операторите, които са ляво-асоциативни, групират своите операнди отляво на израза, десните асоциативни оператори отдясно и операторите без асоциативност нямат определено поведение, когато се използват последователно в израз.

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

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

Стандартна библиотечна асоциативност Swift (предимство от най-високо до най-ниско)
Операторски групи Примери Асоциативност
Побитов приоритет на смяна >> & <>>> нито един
Умножение предимство & *% & * / наляво
Предимство на добавянето | & + & - + - ^ наляво
Предварителност на формирането на обхвата … <… нито един
Кастинг предимство е като нито един
Предшественост с нулево обединяване ?? нали
Предимство на сравнението ! => = <= === == нито един
Предимство на логическата конюнкция && наляво
Предимство на логическата дизюнкция || наляво
Предимство по подразбиране ~> нито един
Тройно предимство ?: нали
Функция Стрелка предимство () нали
Приоритет на заданието | =% = / = & <> = & = * = >> = << = = нали

Пример 3: Асоциация на бърз оператор

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

Когато стартирате горната програма, изходът ще бъде:

 200

В горната програма изразът се оценява отляво надясно, тъй като операторите попадат в групите за умножение по приоритет и има лява асоциативност. Следователно операцията по разделяне се извършва по-рано и получавате резултата 200 . Какво ще стане, ако искате първо да изпълните умножението? Трябва да увиете 2 * 10израза в () скоби като:

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

Когато стартирате горната програма, изходът ще бъде:

 2

Не е нужно да запомняте таблицата за предимство и асоциативна таблица. През повечето време предимството и асоциативността на операторите имат смисъл сами по себе си. Винаги можете да използвате таблицата за справка, когато се съмнявате. Също така е по-добре да използвате скоби, за да улесните разбирането на кода си.

Интересни статии...