Prioritate și asociativitate rapidă a operatorului (cu exemple)

În acest articol veți afla despre regulile utilizate pentru a evalua o expresie cu operatori și operanzi.

Prioritatea operatorului rapid

Prioritatea operatorului este o colecție de reguli utilizate pentru a evalua o expresie matematică dată. Când există mai mulți operatori folosiți într-o singură expresie, fiecare parte este evaluată într-o anumită ordine numită prioritate operator. Anumiți operatori au prioritate mai mare decât alții, ceea ce afectează modul în care este evaluată o expresie.

Tabelul de prioritate al operatorului

Tabelul de mai jos prezintă prioritatea operatorilor din Swift. Cu cât apare mai sus în tabel, cu atât este mai mare prioritatea sa.

Grupuri de prioritate bibliotecă standard Swift (de la cel mai mare la cel mai mic)
Grupuri de operatori Exemple
Precedență de deplasare bitwise >> & <>>>
Precedenta multiplicarii & *% & * /
Precedență adițională | & + & - + - ^
Precedența de formare a intervalului … <…
Precedența de turnare este ca
Precedența nulă ??
Precedență de comparație ! => = <= === ==
Precedența conjuncției logice &&
Precedența logică a disjuncției ||
Precedență implicită ~>
Precedenta ternara ?:
Funcția Prioritate săgeată ()
Precedența atribuirii | =% = / = & <> = & = * = >> = << = = + = - =

Exemplul 1: Precedența operatorului rapid

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

Când rulați programul de mai sus, ieșirea va fi:

 29

În exemplul de mai sus, dacă citiți expresia de la stânga la dreapta, s-ar putea aștepta ca producția să fie 45. Dar, operatorul de multiplicare are o prioritate mai mare decât operatorul plus , astfel încât expresia 4 + 5 * 5 este evaluată ca 4 + (5 * 5). Prin urmare, print(x)iese 29 pe ecran.

Pași de execuție
Pași Operator Expresie Valoare returnată din expresie
1 * 5 * 5 25
2 + 4 + 25 29
3 = print (x) 29

Exemplul 2: Operator Swift Precedență cu operator de atribuire complexă

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

Când rulați programul de mai sus, ieșirea va fi:

 19

În exemplul de mai sus, expresia var y = 15atribuie valoarea 15 în variabila y.

În următoarea expresie y += 10 - 2 * 3, operatorul de multiplicare are o prioritate mai mare decât operatorul de scădere și atribuire a compusului ( +=).

Prin urmare, expresia y += 10 - 2 * 3este evaluată y = y + (10 - (2 * 3)).

Pași de execuție
Pași Operator Expresie Valoare returnată din expresie
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Asociativitate rapidă a operatorilor

Deși există reguli predefinite definite de prioritatea operatorului pentru a evalua o expresie, s-ar putea să vă întrebați ce se întâmplă dacă există mai mulți operatori cu același nivel de prioritate. Asociativitatea operatorului definește modul în care operatorii cu aceeași prioritate sunt grupați împreună.

În Swift, operatorii pot fi fie asociativi la stânga, fie asociați la dreapta, fie nu au asociativitate. Operatorii care sunt asociativi la stânga, își grupează operanzii din stânga instrucțiunii, operatorii asociativi la dreapta din dreapta și operatorii fără asociativitate nu au un comportament definit atunci când sunt utilizați în ordine într-o expresie.

Tabel de asociativitate a operatorului

Tabelul de mai jos prezintă asociativitatea operatorilor Swift împreună cu precedența.

Swift Standard Library Associativity (Precedență de la cea mai mare la cea mai mică)
Grupuri de operatori Exemple Asociativitate
Precedență de deplasare bitwise >> & <>>> nici unul
Precedenta multiplicarii & *% & * / stânga
Precedență adițională | & + & - + - ^ stânga
Precedența de formare a intervalului … <… nici unul
Precedența de turnare este ca nici unul
Precedența nulă ?? dreapta
Precedență de comparație ! => = <= === == nici unul
Precedența conjuncției logice && stânga
Precedența logică a disjuncției || stânga
Precedență implicită ~> nici unul
Precedenta ternara ?: dreapta
Funcția Prioritate săgeată () dreapta
Precedența atribuirii | =% = / = & <> = & = * = >> = << = = dreapta

Exemplul 3: Asociativitatea operatorului rapid

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

Când rulați programul de mai sus, ieșirea va fi:

 200

În programul de mai sus, expresia este evaluată de la stânga la dreapta, deoarece operatorii se încadrează în grupuri de prioritate de multiplicare și au lăsat asociativitate. Prin urmare, operația de divizare are loc mai devreme și obțineți rezultatul 200 . Ce se întâmplă dacă doriți să executați mai întâi multiplicarea? Trebuie să înfășurați 2 * 10expresia în paranteze () ca:

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

Când rulați programul de mai sus, ieșirea va fi:

 2

Nu trebuie să memorați prioritatea și tabelul asociativ. De cele mai multe ori, prioritatea și asociativitatea operatorilor au sens în sine. Puteți folosi întotdeauna tabelul pentru referință atunci când aveți dubii. De asemenea, este mai bine să utilizați paranteze pentru a vă ușura înțelegerea codului.

Articole interesante...