U ovom ćete članku naučiti o pravilima koja se koriste za vrednovanje izraza pomoću operatora i operanda.
Prednost brzog operatora
Prednost operatora je zbirka pravila koja se koriste za vrednovanje datog matematičkog izraza. Kada se u jednom izrazu koristi nekoliko operatora, svaki se dio procjenjuje određenim redoslijedom koji se naziva prednost operatora. Određeni operatori imaju veći prioritet od ostalih što utječe na način ocjenjivanja izraza.
Tablica prioriteta operatora
Tablica u nastavku navodi prednost operatora u Swiftu. Što se više prikazuje u tablici, to je veći njegov prioritet.
Swift standardne skupine biblioteke (od najviše do najniže)Grupe operatora | Primjeri |
---|---|
Bitno pomicanje prioriteta | >> & <>>> |
Prednost množenja | & *% & * / |
Prednost dodavanja | | & + & - + - ^ |
Prednost formiranja dometa | … <… |
Prednost lijevanja | je kao |
Nil-Coalescing Precedence | ?? |
Prioritet usporedbe | ! => = <= === == |
Prednost logičke konjukcije | && |
Prednost logičke disjunkcije | || |
Zadana prednost | ~> |
Ternarno prvenstvo | ?: |
Funkcija Prednost strelice | () |
Prednost zadatka | | =% = / = & <> = & = * = >> = << = = + = - = |
Primjer 1: Brza prednost operatora
let x = 4 + 5 * 5 print(x)
Kada pokrenete gornji program, izlaz će biti:
29
U gornjem primjeru, ako pročitate izraz slijeva udesno, mogli biste očekivati da će izlaz biti 45. Ali, operator množenja ima veći prioritet od operatora zbrajanja pa se izraz 4 + 5 * 5
procjenjuje kao 4 + (5 * 5)
. Stoga print(x)
na zaslonu izlazi 29.
Koraci | Operater | Izraz | Vrijednost vraćena iz izraza |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | ispis (x) | 29 |
Primjer 2: Prednost brzog operatora sa složenim operatorom dodjele
var y = 15 y += 10 - 2 * 3 print(y)
Kada pokrenete gornji program, izlaz će biti:
19
U gornjem primjeru izraz var y = 15
dodjeljuje vrijednost 15 varijabli y.
U sljedećem izrazu y += 10 - 2 * 3
operator množenja ima veći prioritet od operatora oduzimanja i složenog dodjeljivanja ( +=
).
Stoga se izraz y += 10 - 2 * 3
ocjenjuje kao y = y + (10 - (2 * 3))
.
Koraci | Operater | Izraz | Vrijednost vraćena iz izraza |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Udruženje brzih operatora
Iako postoje unaprijed definirana pravila definirana prioritetom operatora za procjenu izraza, možda se pitate što se događa ako postoji više operatora iste razine prioriteta. Asocijativnost operatora definira kako su operatori s istim prioritetom grupirani zajedno.
U Swiftu operatori mogu biti ili lijevo-asocijativni, desni-asocijativni ili nemaju asocijativnost. Operatori koji su lijevo asocijativni, grupiraju svoje operande s lijeve strane izraza, desni asocijativni operatori s desne strane i operatori bez asocijativnosti nemaju definirano ponašanje kada se koriste u nizu u izrazu.
Tablica asocijativnosti operatora
Tablica u nastavku prikazuje asocijativnost Swift operatora zajedno s prioritetom.
Swift standardna knjižnična asocijativnost (prednost od najviše do najniže)Grupe operatora | Primjeri | Asocijativnost |
---|---|---|
Bitno pomicanje prioriteta | >> & <>>> | nijedna |
Prednost množenja | & *% & * / | lijevo |
Prednost dodavanja | | & + & - + - ^ | lijevo |
Prednost formiranja dometa | … <… | nijedna |
Prednost lijevanja | je kao | nijedna |
Nil-Coalescing Precedence | ?? | pravo |
Prioritet usporedbe | ! => = <= === == | nijedna |
Prednost logičke konjukcije | && | lijevo |
Prednost logičke disjunkcije | || | lijevo |
Zadana prednost | ~> | nijedna |
Ternarno prvenstvo | ?: | pravo |
Funkcija Prednost strelice | () | pravo |
Prednost zadatka | | =% = / = & <> = & = * = >> = << = = | pravo |
Primjer 3: Udruživanje brzih operatora
let x = 40 / 2 * 10 print(x)
Kada pokrenete gornji program, izlaz će biti:
200
U gore navedenom programu izraz se ocjenjuje slijeva udesno jer operatori spadaju u skupine prioriteta množenja i ima lijevu asocijativnost. Stoga se operacija dijeljenja odvija ranije i dobivate rezultat 200 . Što ako želite prvo izvršiti množenje? 2 * 10
Izraz morate umotati u zagrade () kao:
let x = 40 / (2 * 10) print(x)
Kada pokrenete gornji program, izlaz će biti:
2
Ne trebate pamtiti tablicu prioriteta i asocijacije. Većinu vremena prednost i asocijativnost operatora sama po sebi imaju smisla. Uvijek možete upotrijebiti tablicu za referencu kada sumnjate. Također, bolje je koristiti zagrade kako biste kôd lakše razumjeli.