Operatori kiire ülimuslikkus ja assotsiatiivsus (näidetega)

Selles artiklis saate teada reeglite kohta, mida kasutatakse avaldise hindamiseks koos operaatorite ja operandidega.

Kiire operaatori ülimuslikkus

Operaatori prioriteet on reeglite kogum, mida kasutatakse antud matemaatilise avaldise hindamiseks. Kui ühes avaldises kasutatakse mitu operaatorit, hinnatakse iga osa kindlas järjekorras, mida nimetatakse operaatori prioriteediks. Teatud operaatoritel on teistest kõrgem prioriteet, mis mõjutab avaldise hindamist.

Operaatori tähtsuse tabel

Allolevas tabelis on loetletud Swifti operaatorite paremusjärjestus. Mida kõrgem see tabelis on, seda suurem on selle tähtsus.

Kiired raamatukogu eelistusgrupid (kõrgeimast madalaimani)
Operaatorigrupid Näited
Pisuti nihutamise ülimuslikkus >> & <>>>
Korrutamise ülimuslikkus & *% & * /
Lisamise ülimuslikkus | & + & - + - ^
Vahemiku moodustamise ülimuslikkus … <…
Casting Preedence on nagu
Nullkoaluleerumise ülimuslikkus ??
Võrdlusjärjestus ! => = <= === ==
Loogilise konjunktsiooni ülimuslikkus &&
Loogilise disjunktsiooni ülimuslikkus ||
Vaikimisi ülimuslikkus ~>
Kolmikjärjekord ?:
Funktsioon Noole paremusjärjestus ()
Ülesande ülimuslikkus | =% = / = & <> = & = * = >> = << = = + = - =

Näide 1: kiire operaatori ülimuslikkus

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

Ülaltoodud programmi käivitamisel on väljund:

 29

Ülaltoodud näites võib avaldist vasakult paremale lugedes eeldada, et väljundiks on 45. Korrutamisoperaatoril on aga suurem prioriteet kui liitmisoperaatoril, nii et väljendit 4 + 5 * 5 hinnatakse järgmiselt 4 + (5 * 5). Seetõttu print(x)väljastab ekraanil 29.

Täitmise etapid
Sammud Operaator Väljendus Väljendilt tagastatud väärtus
1 * 5 * 5 25
2 + 4 + 25 29
3 = print (x) 29

Näide 2: kiire operaatori ülimuslikkus keeruka määramise operaatoriga

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

Ülaltoodud programmi käivitamisel on väljund:

 19

Ülaltoodud näites var y = 15omistab avaldis muutujas y väärtuse 15.

Järgmises avaldises y += 10 - 2 * 3on korrutamise operaatoril kõrgem tähtsus kui lahutamise ja ühendi määramise operaatoril ( +=).

Seega väljend y += 10 - 2 * 3hinnatakse y = y + (10 - (2 * 3)).

Täitmise etapid
Sammud Operaator Väljendus Väljendilt tagastatud väärtus
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Kiire operaatorite assotsiatiivsus

Ehkki avaldise hindamiseks on operaatori eelisjärjekorras määratletud eelmääratud reeglid, võiksite mõelda, mis juhtub, kui sama prioriteeditasemega on mitu operaatorit. Operaatorite assotsiatiivsus määratleb, kuidas sama prioriteediga operaatorid rühmitatakse.

Swiftis võivad operaatorid olla kas vasakpoolsed, parempoolsed või neil puudub assotsiatiivsus. Operaatoritel, kes on vasakpoolsed, assotsieeruvad, rühmitavad oma operandid lause vasakult, parempoolse assotsiatsiooni operaatorid paremalt ja operaatorid, kellel pole assotsiatiivsust, ei ole määratletud käitumist, kui neid kasutatakse avaldises järjestikku.

Operaatori assotsiatiivsustabel

Allolevas tabelis on näidatud Swifti operaatorite assotsiatiivsus koos ülimuslikkusega.

Kiire standardse raamatukogu assotsiatiivsus (ülimuslikkus kõige madalamast)
Operaatorigrupid Näited Assotsiatiivsus
Pisuti nihutamise ülimuslikkus >> & <>>> mitte ühtegi
Korrutamise ülimuslikkus & *% & * / vasakule
Lisamise ülimuslikkus | & + & - + - ^ vasakule
Vahemiku moodustamise ülimuslikkus … <… mitte ühtegi
Casting Preedence on nagu mitte ühtegi
Nullkoaluleerumise ülimuslikkus ?? eks
Võrdlusjärjestus ! => = <= === == mitte ühtegi
Loogilise konjunktsiooni ülimuslikkus && vasakule
Loogilise disjunktsiooni ülimuslikkus || vasakule
Vaikimisi ülimuslikkus ~> mitte ühtegi
Kolmikjärjekord ?: eks
Funktsioon Noole paremusjärjestus () eks
Ülesande ülimuslikkus | =% = / = & <> = & = * = >> = << = = eks

Näide 3: kiire operaatori assotsiatiivsus

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

Ülaltoodud programmi käivitamisel on väljund:

 200

Ülaltoodud programmis hinnatakse väljendit vasakult paremale, kuna operaatorid jagunevad korrutamise prioriteetsuse rühmadesse ja neil on assotsiatiivsus. Seetõttu toimub jagamistoiming varem ja saate tulemuse 200 . Mis siis, kui soovite kõigepealt korrutada? Te peate 2 * 10avaldise pakkima () sulgudesse järgmiselt:

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

Ülaltoodud programmi käivitamisel on väljund:

 2

Teil pole vaja meelde jätta prioriteetsust ja assotsiatiivset tabelit. Enamasti on operaatorite ülimuslikkus ja assotsiatiivsus iseenesest mõistlik. Kahtluse korral võite tabelit alati viitena kasutada. Samuti on koodi parem mõistmine parem kasutada sulgudes.

Huvitavad Artiklid...