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 = 15přiřadí hodnotu 15 v proměnné y.
V dalším výrazu y += 10 - 2 * 3má 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 * 3vyhodnocen 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 * 10vý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.








