Prednost in asociativnost hitrega operaterja (z primeri)

V tem članku boste spoznali pravila, ki se uporabljajo za ovrednotenje izraza z operatorji in operandi.

Prednost hitrega operaterja

Prednost operaterja je zbirka pravil, ki se uporabljajo za vrednotenje danega matematičnega izraza. Če je v enem izrazu uporabljenih več operaterjev, se vsak del ovrednoti v določenem vrstnem redu, ki se imenuje prednost operaterja. Nekateri operaterji imajo večjo prednost kot drugi, kar vpliva na način ocenjevanja izraza.

Tabela prednosti operaterja

V spodnji tabeli je navedena prednost operaterjev v Swiftu. Višje kot je v tabeli, večja je njegova prednost.

Swift standardne knjižnične prednostne skupine (od najvišje do najnižje)
Skupine operaterjev Primeri
Prednost bitnega premika >> & <>>>
Prednost množenja & *% & * /
Prednost dodajanja | & + & - + - ^
Prednost oblikovanja obsega … <…
Prednost oddaje je kot
Prednost ničelnega združevanja ??
Prednost primerjave ! => = <= === ==
Prednost logične veznice &&
Prednost logične ločitve ||
Privzeta prednost ~>
Ternarna prednost ?:
Funkcija Prednost puščice ()
Prednost dodelitve | =% = / = & <> = & = * = >> = << = = + = - =

Primer 1: Prednost hitrega operaterja

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

Ko zaženete zgornji program, bo rezultat:

 29.

Če v zgornjem primeru preberete izraz od leve proti desni, lahko pričakujete, da bo izhod 45. Vendar ima operater množenja večjo prednost kot operator seštevanja, zato je izraz 4 + 5 * 5 ovrednoten kot 4 + (5 * 5). Zato print(x)na zaslonu izpiše 29.

Izvedbeni koraki
Koraki Operater Izraz Vrednost, vrnjena iz izraza
1. * 5 * 5 25.
2. + 4 + 25 29.
3. = natisni (x) 29.

Primer 2: Prednost hitrega operaterja s kompleksnim operaterjem dodelitve

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

Ko zaženete zgornji program, bo rezultat:

 19.

V zgornjem primeru izraz var y = 15dodeli vrednost 15 spremenljivki y.

V naslednjem izrazu y += 10 - 2 * 3ima operater množenja višjo prednost kot operater odštevanja in sestavljene dodelitve ( +=).

Zato je izraz y += 10 - 2 * 3ovrednoten kot y = y + (10 - (2 * 3)).

Izvedbeni koraki
Koraki Operater Izraz Vrednost, vrnjena iz izraza
1. = var y = 15 15.
2. * 2 * 3 6.
3. - 10 - 6 4.
4. + = 15 + 4 19.

Združenje hitrih operaterjev

Čeprav obstajajo vnaprej določena pravila, ki jih za ocenjevanje izraza določa prednost operatorja, se morda sprašujete, kaj se zgodi, če obstaja več operaterjev iste stopnje prednosti. Asociativnost operaterja določa, kako so operaterji iste prednosti združeni.

V Swiftu so lahko operaterji levo asociativni, desni asociativni ali nimajo asociativnosti. Operatorji, ki so levo asociativni, svoje operande združijo z leve strani stavka, desni asociativni operatorji z desne in operaterji brez asociativnosti nimajo definiranega vedenja, če se uporabljajo v zaporedju v izrazu.

Tabela asociativnosti operaterja

Spodnja tabela prikazuje asociativnost operaterjev Swift skupaj s prednostjo.

Swift Standard Library Associativity (prednost pred najvišjo in najnižjo)
Skupine operaterjev Primeri Asociativnost
Prednost bitnega premika >> & <>>> nobenega
Prednost množenja & *% & * / levo
Prednost dodajanja | & + & - + - ^ levo
Prednost oblikovanja obsega … <… nobenega
Prednost oddaje je kot nobenega
Prednost ničelnega združevanja ?? prav
Prednost primerjave ! => = <= === == nobenega
Prednost logične veznice && levo
Prednost logične ločitve || levo
Privzeta prednost ~> nobenega
Ternarna prednost ?: prav
Funkcija Prednost puščice () prav
Prednost dodelitve | =% = / = & <> = & = * = >> = << = = prav

Primer 3: Združenje hitrih operaterjev

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

Ko zaženete zgornji program, bo rezultat:

 200

V zgornjem programu je izraz ovrednoten od leve proti desni, ker operaterji spadajo v množične prednostne skupine in imajo levo asociativnost. Zato operacija delitve poteka prej in dobite rezultat 200 . Kaj če želite najprej izvesti množenje? 2 * 10Izraz morate zaviti v () oklepaje kot:

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

Ko zaženete zgornji program, bo rezultat:

 2.

Ni vam treba zapomniti tabele prednosti in asociacij. Večina časa ima prednost in asociativnost operaterjev sama po sebi smiselna. Tabelo lahko kadar koli uporabite kot referenco, kadar ste v dvomih. Prav tako je bolje uporabiti oklepaje, da bo vaša koda lažje razumljiva.

Zanimive Članki...