V tomto článku se dozvíte o pravidlech použitých k vyhodnocení výrazu s operátory a operandy.
Priorita operátoru Swift
Priorita operátoru je soubor pravidel používaných k vyhodnocení daného matematického výrazu. Pokud je v jednom výrazu použito několik operátorů, je každá část vyhodnocena v určitém pořadí, které se nazývá priorita operátoru. Určité operátory mají vyšší prioritu než jiné, což ovlivňuje, jak je výraz vyhodnocen.
Tabulka priorit operátorů
Níže uvedená tabulka uvádí prioritu operátorů v Swiftu. Čím vyšší je v tabulce, tím vyšší je jeho priorita.
Skupiny standardních knihoven Swift Standard (od nejvyšší po nejnižší)Skupiny operátorů | Příklady |
---|---|
Priorita bitového posunu | >> & <>>> |
Priorita násobení | & *% & * / |
Priorita sčítání | | & + & - + - ^ |
Přednost formování rozsahu | … <… |
Přednost castingu | je jako |
Nulová sloučení | ?? |
Srovnávací přednost | ! => = <= === == |
Logická spojovací přednost | && |
Logická disjunkce přednost | || |
Výchozí priorita | ~> |
Ternární přednost | ?: |
Priorita šipky funkce | () |
Přednost přiřazení | | =% = / = & <> = & = * = >> = << = = + = - = |
Příklad 1: Preference operátora Swift
let x = 4 + 5 * 5 print(x)
Když spustíte výše uvedený program, výstup bude:
29
Ve výše uvedeném příkladu, pokud čtete výraz zleva doprava, můžete očekávat, že výstup bude 45. Ale operátor násobení má vyšší prioritu než operátor přidání, takže výraz 4 + 5 * 5
je vyhodnocen jako 4 + (5 * 5)
. Proto print(x)
výstupy 29 na obrazovce.
Kroky | Operátor | Výraz | Hodnota vrácená z výrazu |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | tisk (x) | 29 |
Příklad 2: Preference operátoru Swift s komplexním operátorem přiřazení
var y = 15 y += 10 - 2 * 3 print(y)
Když spustíte výše uvedený program, výstup bude:
19
Ve výše uvedeném příkladu výraz var y = 15
přiřadí hodnotu 15 v proměnné y.
V dalším výrazu y += 10 - 2 * 3
má operátor násobení vyšší prioritu než operátor odčítání a složeného přiřazení ( +=
).
Proto je výraz y += 10 - 2 * 3
vyhodnocen jako y = y + (10 - (2 * 3))
.
Kroky | Operátor | Výraz | Hodnota vrácená z výrazu |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Asociativita operátora Swift
Ačkoli existují předdefinovaná pravidla definovaná prioritou operátorů k vyhodnocení výrazu, možná vás zajímá, co se stane, pokud existuje více operátorů stejné úrovně priority. Asociativita operátorů definuje, jak jsou operátory stejné priority seskupeny.
V Swiftu mohou být operátoři buď asociativní vlevo, asociativní vpravo nebo nemají žádnou asociativitu. Operátoři, kteří jsou asociativní vlevo, seskupují své operandy zleva od příkazu, operátory asociativní vpravo a operátoři bez asociativity nemají žádné definované chování při použití v pořadí ve výrazu.
Tabulka asociativity operátorů
Tabulka níže ukazuje asociativitu operátorů Swift spolu s prioritou.
Standardní asociativita knihovny Swift (priorita od nejvyšší k nejnižší)Skupiny operátorů | Příklady | Asociativita |
---|---|---|
Priorita bitového posunu | >> & <>>> | žádný |
Priorita násobení | & *% & * / | vlevo, odjet |
Priorita sčítání | | & + & - + - ^ | vlevo, odjet |
Přednost formování rozsahu | … <… | žádný |
Přednost castingu | je jako | žádný |
Nulová sloučení | ?? | že jo |
Srovnávací přednost | ! => = <= === == | žádný |
Logická spojovací přednost | && | vlevo, odjet |
Logická disjunkce přednost | || | vlevo, odjet |
Výchozí priorita | ~> | žádný |
Ternární přednost | ?: | že jo |
Priorita šipky funkce | () | že jo |
Přednost přiřazení | | =% = / = & <> = & = * = >> = << = = | že jo |
Příklad 3: Asociativita operátora Swift
let x = 40 / 2 * 10 print(x)
Když spustíte výše uvedený program, výstup bude:
200
Ve výše uvedeném programu je výraz vyhodnocen zleva doprava, protože operátory spadají do skupin priorit násobení a mají asociativitu vlevo. Proto operace dělení proběhne dříve a dostanete výsledek 200 . Co když chcete nejprve provést násobení? Musíte zabalit 2 * 10
výraz do závorek () jako:
let x = 40 / (2 * 10) print(x)
Když spustíte výše uvedený program, výstup bude:
2
Nemusíte si pamatovat prioritní a asociativní tabulku. Většinu času má přednost a asociativita operátorů sama o sobě smysl. V případě pochybností můžete vždy použít tabulku jako referenci. Pro lepší pochopení kódu je také lepší použít závorky.