Greitas operatoriaus prioritetas ir asociatyvumas (su pavyzdžiais)

Šiame straipsnyje sužinosite apie taisykles, naudojamas vertinant išraišką su operatoriais ir operandais.

Greitas operatoriaus prioritetas

Operatoriaus pirmenybė yra taisyklių rinkinys, naudojamas tam tikrai matematinei išraiškai įvertinti. Kai vienoje išraiškoje naudojami keli operatoriai, kiekviena dalis vertinama tam tikra tvarka, vadinama operatoriaus pirmenybe. Tam tikri operatoriai turi didesnį prioritetą nei kiti, o tai turi įtakos išraiškos vertinimui.

Operatoriaus pirmenybės lentelė

Žemiau esančioje lentelėje pateikiama „Swift“ operatorių pirmenybė. Aukštesnis jis rodomas lentelėje, tuo didesnis jo prioritetas.

Greitos standartinės bibliotekos pirmenybės grupės (nuo didžiausios iki žemiausios)
Operatorių grupės Pavyzdžiai
Pirmumo prioritetas >> & <>>>
Daugybos pirmenybė & *% & * /
Papildymo pirmenybė | & + & - + - ^
Diapazono formavimo pirmenybė … <…
Liejimo pirmenybė yra kaip
Nulio sujungimo pirmenybė ??
Palyginimo pirmenybė ! => = <= === ==
Loginio jungtuko pirmenybė &&
Loginio disjunkcijos pirmenybė ||
Numatytasis prioritetas ~>
Trikampis pirmenybė ?:
Funkcija Rodyklės pirmenybė ()
Užduoties pirmenybė | =% = / = & <> = & = * = >> = << = = + = - =

1 pavyzdys: greito operatoriaus pirmenybė

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

Kai paleisite pirmiau nurodytą programą, išvestis bus:

 29

Ankstesniame pavyzdyje, jei skaitote išraišką iš kairės į dešinę, galite tikėtis, kad išvestis bus 45. Tačiau daugybos operatorius turi didesnę pirmenybę nei pridėjimo operatorius, todėl išraiška 4 + 5 * 5 vertinama kaip 4 + (5 * 5). Todėl print(x)ekrane išvedama 29.

Vykdymo žingsniai
Žingsniai operatorius Išraiška Vertė grąžinta iš išraiškos
1 * 5 * 5 25
2 + 4 + 25 29
3 = spausdinti (x) 29

2 pavyzdys: greito operatoriaus pirmenybė su sudėtingu priskyrimo operatoriumi

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

Kai paleisite pirmiau nurodytą programą, išvestis bus:

 19

Ankstesniame pavyzdyje išraiška var y = 15kintamajam y priskiria 15 reikšmę.

Kitoje išraiškoje y += 10 - 2 * 3daugybos operatorius turi didesnę pirmenybę nei atimties ir junginio priskyrimo operatorius ( +=).

Todėl išraiška y += 10 - 2 * 3vertinama kaip y = y + (10 - (2 * 3)).

Vykdymo žingsniai
Žingsniai operatorius Išraiška Vertė grąžinta iš išraiškos
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Greitas operatoriaus asociatyvumas

Nors ekspresui įvertinti yra iš anksto nustatytos operatoriaus pirmenybės apibrėžtos taisyklės, jums gali kilti klausimas, kas nutiks, jei yra keli tos pačios pirmenybės lygio operatoriai. Operatorių asociatyvumas apibrėžia, kaip tos pačios svarbos operatoriai yra grupuojami kartu.

„Swift“ sistemoje operatoriai gali būti arba kairieji, ir dešinieji, arba neturi asociatyvumo. Operatoriai, kurie yra asociatyvūs kairėje, grupuoja savo operandus iš kairės teiginio, dešiniojo asociacijos operatoriai iš dešinės ir operatoriai, neturintys asociatyvumo, neturi apibrėžto elgesio, kai naudojami išraiškoje nuosekliai.

Operatorių asociacijų lentelė

Žemiau esančioje lentelėje parodytas „Swift“ operatorių asociatyvumas kartu su pirmenybe.

Greitas standartinis bibliotekos asociatyvumas (prioritetas nuo didžiausio iki mažiausio)
Operatorių grupės Pavyzdžiai Asociatyvumas
Pirmumo prioritetas >> & <>>> nė vienas
Daugybos pirmenybė & *% & * / paliko
Papildymo pirmenybė | & + & - + - ^ paliko
Diapazono formavimo pirmenybė … <… nė vienas
Liejimo pirmenybė yra kaip nė vienas
Nulio sujungimo pirmenybė ?? teisingai
Palyginimo pirmenybė ! => = <= === == nė vienas
Loginio jungtuko pirmenybė && paliko
Loginio disjunkcijos pirmenybė || paliko
Numatytasis prioritetas ~> nė vienas
Trikampis pirmenybė ?: teisingai
Funkcija Rodyklės pirmenybė () teisingai
Užduoties pirmenybė | =% = / = & <> = & = * = >> = << = = teisingai

3 pavyzdys: greitas operatoriaus asociatyvumas

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

Kai paleisite pirmiau nurodytą programą, išvestis bus:

 200

Pirmiau pateiktoje programoje išraiška vertinama iš kairės į dešinę, nes operatoriai patenka į daugybos pirmenybės grupes ir palieka asociatyvumą. Todėl padalijimo operacija vyksta anksčiau ir jūs gaunate 200 rezultatą . Ką daryti, jei norite pirmiausia atlikti dauginimą? Išraišką turite suvynioti 2 * 10į () petnešas kaip:

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

Kai paleisite pirmiau nurodytą programą, išvestis bus:

 2

Jums nereikia įsiminti pirmenybės ir asociatyviosios lentelės. Dažniausiai operatorių prioritetas ir asociatyvumas savaime turi prasmę. Jei abejojate, visada galite naudoti lentelę. Be to, geriau naudoti skliaustus, kad jūsų kodas būtų lengviau suprantamas.

Įdomios straipsniai...