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.
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 = 15
dodeli vrednost 15 spremenljivki y.
V naslednjem izrazu y += 10 - 2 * 3
ima operater množenja višjo prednost kot operater odštevanja in sestavljene dodelitve ( +=
).
Zato je izraz y += 10 - 2 * 3
ovrednoten kot y = y + (10 - (2 * 3))
.
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 * 10
Izraz 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.