Gyors operátor elsőbbség és asszociativitás (példákkal)

Ebben a cikkben megismerheti a kifejezés operátorokkal és operandusokkal történő értékeléséhez használt szabályokat.

Gyors kezelő elsőbbség

Az operátori elsőbbség az adott matematikai kifejezés értékeléséhez használt szabályok gyűjteménye. Ha egy kifejezésben több operátort használnak, akkor az egyes részeket egy bizonyos sorrendben értékelik, amelyet operátor elsőbbségnek nevezünk. Bizonyos operátorok magasabb prioritással bírnak, mint mások, ami befolyásolja egy kifejezés értékelését.

Operátor elsőbbségi táblázat

Az alábbi táblázat felsorolja a Swift operátorainak elsőbbségét. Minél magasabb jelenik meg a táblázatban, annál nagyobb az elsőbbsége.

Swift Standard Library Precedence Csoportok (a legmagasabbtól a legalacsonyabbig)
Operátorcsoportok Példák
Bitenkénti eltolás elsőbbsége >> & <>>>
Szorzás elsőbbsége & *% & * /
Összeadási elsőbbség | & + & - + - ^
A tartomány kialakításának elsőbbsége … <…
Casting elsőbbség olyan, mint
Nulla-koalíziós elsőbbség ??
Összehasonlító elsőbbség ! => = <= === ==
Logikai kötőszó elsőbbsége &&
Logikai diszjunkció elsőbbsége ||
Alapértelmezett elsőbbség ~>
Ternáris elsőbbség ?:
Funkció Nyíl elsőbbsége ()
A megbízás elsőbbsége | =% = / = & <> = & = * = >> = << = = + = - =

1. példa: A gyors operátor elsőbbsége

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

A fenti program futtatásakor a kimenet a következő lesz:

 29.

A fenti példában, ha balról jobbra olvassa a kifejezést, akkor a kimenet 45-re számíthat. De a szorzási operátornak nagyobb az elsőbbsége, mint az összeadás operátornak, így a kifejezést 4 + 5 * 5 úgy értékelik 4 + (5 * 5). Ezért print(x)a képernyőn 29 kimenetet kap.

Végrehajtási lépések
Lépések Operátor Kifejezés A kifejezésből visszaadott érték
1 * 5 * 5 25
2 + 4 + 25 29.
3 = nyomtatás (x) 29.

2. példa: Swift Operator elsőbbség komplex hozzárendelési operátorral

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

A fenti program futtatásakor a kimenet a következő lesz:

 19.

A fenti példában a kifejezés var y = 15az y változóban 15 értéket rendel hozzá.

A következő kifejezésben y += 10 - 2 * 3a szorzó operátornak nagyobb az elsőbbsége, mint a kivonás és összetett hozzárendelés operátornak ( +=).

Ezért a kifejezést y += 10 - 2 * 3úgy értékeljük, hogy y = y + (10 - (2 * 3)).

Végrehajtási lépések
Lépések Operátor Kifejezés A kifejezésből visszaadott érték
1 = var y = 15 15
2 * 2 * 3 6.
3 - 10 - 6 4
4 + = 15 + 4 19.

Gyors operátor asszociativitás

Noha vannak előre definiált szabályok, amelyeket az operátor elsőbbsége határoz meg egy kifejezés kiértékeléséhez, felmerülhet a kérdés, hogy mi történik, ha több operátor van ugyanabban a rangsorban. Az operátor asszociativitás meghatározza, hogy az azonos rangsorban lévő operátorok hogyan csoportosuljanak.

A Swiftben az operátorok lehetnek bal-asszociatívak, jobb-asszociatívak, vagy nincs asszociativitásuk. Azok az operátorok, amelyek bal asszociatívak, operandusukat a utasítás bal oldaláról csoportosítják, jobb oldali asszociatív operátorok jobbról és az asszociativitás nélküli operátorok nem rendelkeznek meghatározott viselkedéssel, ha sorrendben használják őket egy kifejezésben.

Operátor asszociativitási táblázat

Az alábbi táblázat a Swift operátorok asszociativitását mutatja az elsőbbség mellett.

Swift Standard Könyvtári asszociativitás (elsőbbség a legalacsonyabbtól a legalacsonyabbig)
Operátorcsoportok Példák Asszociativitás
Bitenkénti eltolás elsőbbsége >> & <>>> egyik sem
Szorzás elsőbbsége & *% & * / bal
Összeadási elsőbbség | & + & - + - ^ bal
A tartomány kialakításának elsőbbsége … <… egyik sem
Casting elsőbbség olyan, mint egyik sem
Nulla-koalíziós elsőbbség ?? jobb
Összehasonlító elsőbbség ! => = <= === == egyik sem
Logikai kötőszó elsőbbsége && bal
Logikai diszjunkció elsőbbsége || bal
Alapértelmezett elsőbbség ~> egyik sem
Ternáris elsőbbség ?: jobb
Funkció Nyíl elsőbbsége () jobb
A megbízás elsőbbsége | =% = / = & <> = & = * = >> = << = = jobb

3. példa: Gyors operátor asszociativitás

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

A fenti program futtatásakor a kimenet a következő lesz:

 200

A fenti programban a kifejezést balról jobbra értékelik, mert az operátorok szorzási elsőbbségi csoportokba tartoznak, és asszociativitásuk van. Ezért az osztási művelet korábban megtörténik, és megkapja a 200-as eredményt . Mi van, ha először a szorzást akarja végrehajtani? A 2 * 10kifejezést a () zárójelek közé kell csomagolnia :

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

A fenti program futtatásakor a kimenet a következő lesz:

 2

Nem kell megjegyeznie az elsőbbségi és asszociatív táblázatot. Legtöbbször önmagában van értelme az operátorok elsőbbségének és asszociativitásának. Kétség esetén mindig használhatja a táblázatot referenciaként. Ezenkívül jobb a zárójelek használata a kód könnyebb megértése érdekében.

érdekes cikkek...