Š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.
Ž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 = 15
kintamajam y priskiria 15 reikšmę.
Kitoje išraiškoje y += 10 - 2 * 3
daugybos operatorius turi didesnę pirmenybę nei atimties ir junginio priskyrimo operatorius ( +=
).
Todėl išraiška y += 10 - 2 * 3
vertinama kaip y = y + (10 - (2 * 3))
.
Ž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.