Priorita a asociativita operátora Swift (s příklady)

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.

Prováděcí kroky
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)).

Prováděcí kroky
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.

Zajímavé články...