Tässä artikkelissa opit säännöistä, joita käytetään lausekkeen arviointiin operaattoreiden ja operandien kanssa.
Nopea operaattorin etusija
Operaattorin prioriteetti on kokoelma sääntöjä, joita käytetään tietyn matemaattisen lausekkeen arviointiin. Kun yhdessä lausekkeessa käytetään useita operaattoreita, kukin osa arvioidaan tietyssä järjestyksessä, jota kutsutaan operaattorin etusijalle. Tietyillä operaattoreilla on korkeampi prioriteetti kuin muilla, mikä vaikuttaa lausekkeen arviointiin.
Operaattorin prioriteettitaulukko
Alla olevassa taulukossa luetellaan operaattoreiden etusija Swiftissä. Mitä korkeampi se näkyy taulukossa, sitä korkeampi sen etusija.
Nopeat kirjastojen etusijaryhmät (korkeimmasta matalimpaan)Operaattoriryhmät | Esimerkkejä |
---|---|
Bittisuuntainen muutoksen etusija | >> & <>>> |
Kertomisen etusija | & *% & * / |
Lisäysprioriteetti | | & + & - + - ^ |
Alueen muodostumisen etusija | … <… |
Casting-etusija | on kuin |
Nollapitoisuus | ?? |
Vertailun etusija | ! => = <= === == |
Loogisen konjunktion etusija | && |
Loogisen disjunktion etusija | || |
Oletusaste | ~> |
Ternäärinen etusija | ?: |
Toiminto Nuolen etusija | () |
Tehtävän etusija | | =% = / = & <> = & = * = >> = << = = + = - = |
Esimerkki 1: Nopea operaattorin etusija
let x = 4 + 5 * 5 print(x)
Kun suoritat yllä olevan ohjelman, tulos on:
29
Yllä olevassa esimerkissä, jos luet lausekkeen vasemmalta oikealle, saatat odottaa, että tulos on 45. Kertolaskuoperaattorilla on kuitenkin korkeampi etusija kuin lisäysoperaattorilla, joten lauseke 4 + 5 * 5
arvioidaan 4 + (5 * 5)
. Siksi print(x)
tuottaa 29 näytöllä.
Askeleet | Operaattori | Ilmaisu | Arvo palautettiin ilmaisusta |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | tulosta (x) | 29 |
Esimerkki 2: Nopea operaattorin etusija monimutkaisella määritysoperaattorilla
var y = 15 y += 10 - 2 * 3 print(y)
Kun suoritat yllä olevan ohjelman, tulos on:
19
Yllä olevassa esimerkissä lauseke var y = 15
määrittää arvon 15 muuttujaan y.
Seuraavassa lausekkeessa y += 10 - 2 * 3
kertolaskuoperaattorilla on korkeampi etusija kuin vähennys- ja yhdistämisoperaattorilla ( +=
).
Siksi ilmaisu y += 10 - 2 * 3
arvioidaan y = y + (10 - (2 * 3))
.
Askeleet | Operaattori | Ilmaisu | Arvo palautettiin ilmaisusta |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10-6 | 4 |
4 | + = | 15 + 4 | 19 |
Nopea operaattorin assosiatiivisuus
Vaikka operaattorin etusija määrittelee ennalta määritellyt säännöt lausekkeen arvioimiseksi, saatat miettiä, mitä tapahtuu, jos useita prioriteettitason operaattoreita on. Operaattorien assosiatiivisuus määrittelee, kuinka saman prioriteetin operaattorit ryhmitellään yhteen.
Swiftissä operaattorit voivat olla joko vasemmalle assosiatiivisia, oikealle assosiatiivisia tai heillä ei ole assosiatiivisuutta. Operaattoreilla, jotka ovat assosiatiivisia vasemmalle, ryhmittelevät operandinsa lauseen vasemmalta puolelta, oikealle assosiatiivisille operaattoreille oikealta ja operaattoreille, joilla ei ole assosiatiivisuutta, ei ole määriteltyä käyttäytymistä, kun niitä käytetään peräkkäin lausekkeessa.
Operaattorin assosiatiivisuustaulukko
Alla olevassa taulukossa on esitetty Swift-operaattoreiden assosiatiivisuus etusijalla.
Swift Standard Library Associativity (etusija korkeimmasta pienimpään)Operaattoriryhmät | Esimerkkejä | Assosiatiivisuus |
---|---|---|
Bittisuuntainen muutoksen etusija | >> & <>>> | ei mitään |
Kertomisen etusija | & *% & * / | vasemmalle |
Lisäysprioriteetti | | & + & - + - ^ | vasemmalle |
Alueen muodostumisen etusija | … <… | ei mitään |
Casting-etusija | on kuin | ei mitään |
Nollapitoisuus | ?? | oikein |
Vertailun etusija | ! => = <= === == | ei mitään |
Loogisen konjunktion etusija | && | vasemmalle |
Loogisen disjunktion etusija | || | vasemmalle |
Oletusaste | ~> | ei mitään |
Ternäärinen etusija | ?: | oikein |
Toiminto Nuolen etusija | () | oikein |
Tehtävän etusija | | =% = / = & <> = & = * = >> = << = = | oikein |
Esimerkki 3: Nopea operaattorin assosiatiivisuus
let x = 40 / 2 * 10 print(x)
Kun suoritat yllä olevan ohjelman, tulos on:
200
Edellä olevassa ohjelmassa lauseke arvioidaan vasemmalta oikealle, koska operaattorit kuuluvat kertolaskujärjestyksiin ja jättävät assosiatiivisuuden. Siksi jakotoiminta tapahtuu aikaisemmin ja saat tuloksen 200 . Entä jos haluat suorittaa kertolaskun ensin? Sinun on käärittävä 2 * 10
lauseke () aaltosulkeisiin seuraavasti:
let x = 40 / (2 * 10) print(x)
Kun suoritat yllä olevan ohjelman, tulos on:
2
Sinun ei tarvitse muistaa etusija- ja assosiaatiotaulukkoa. Suurimman osan ajasta operaattoreiden etusija ja assosiatiivisuus ovat itsessään järkeviä. Voit aina käyttää taulukkoa viitteeksi, jos olet epävarma. Lisäksi on parempi käyttää sulkeita, jotta koodisi olisi helpompi ymmärtää.