Prednost i asocijativnost brzog operatora (s primjerima)

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 izvršenja
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 = 15dodjeljuje vrijednost 15 varijabli y.

U sljedećem izrazu y += 10 - 2 * 3operator množenja ima veći prioritet od operatora oduzimanja i složenog dodjeljivanja ( +=).

Stoga se izraz y += 10 - 2 * 3ocjenjuje kao y = y + (10 - (2 * 3)).

Koraci izvršenja
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 * 10Izraz 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.

Zanimljivi članci...