W tym artykule poznasz reguły używane do obliczania wyrażenia za pomocą operatorów i operandów.
Szybkie pierwszeństwo operatora
Pierwszeństwo operatorów to zbiór reguł używanych do oceny danego wyrażenia matematycznego. Gdy w jednym wyrażeniu jest używanych kilka operatorów, każda część jest oceniana w określonej kolejności nazywanej priorytetem operatorów. Niektóre operatory mają wyższy priorytet niż inne, co wpływa na sposób oceny wyrażenia.
Tabela pierwszeństwa operatorów
W poniższej tabeli przedstawiono pierwszeństwo operatorów w języku Swift. Im wyższa pozycja w tabeli, tym wyższy jej priorytet.
Swift Standard Library Precedence Groups (od najwyższego do najniższego)Grupy operatorów | Przykłady |
---|---|
Pierwszeństwo przesunięcia bitowego | >> & <>>> |
Pierwszeństwo mnożenia | & *% & * / |
Dodatkowe pierwszeństwo | | & + & - + - ^ |
Pierwszeństwo formowania zakresu | … <… |
Casting Precedence | jest jak |
Priorytet zerowej koalescencji | ?? |
Pierwszeństwo porównania | ! => = <= === == |
Pierwszeństwo koniunkcji logicznej | && |
Logiczne pierwszeństwo dysjunkcji | || |
Domyślne pierwszeństwo | ~> |
Pierwszeństwo trójskładnikowe | ?: |
Funkcja Pierwszeństwo strzałek | () |
Pierwszeństwo przypisania | | =% = / = & <> = & = * = >> = << = = + = - = |
Przykład 1: Szybkie pierwszeństwo operatora
let x = 4 + 5 * 5 print(x)
Po uruchomieniu powyższego programu wynik będzie:
29
W powyższym przykładzie, jeśli czytasz wyrażenie od lewej do prawej, możesz oczekiwać, że wynik będzie równy 45. Ale operator mnożenia ma wyższy priorytet niż operator dodawania, więc wyrażenie 4 + 5 * 5
jest oceniane jako 4 + (5 * 5)
. Dlatego print(x)
wyświetla 29 na ekranie.
Kroki | Operator | Wyrażenie | Wartość zwrócona z wyrażenia |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | drukuj (x) | 29 |
Przykład 2: Swift Operator Precedence ze złożonym operatorem przypisania
var y = 15 y += 10 - 2 * 3 print(y)
Po uruchomieniu powyższego programu wynik będzie:
19
W powyższym przykładzie wyrażenie var y = 15
przypisuje wartość 15 w zmiennej y.
W następnym wyrażeniu y += 10 - 2 * 3
operator mnożenia ma wyższy priorytet niż odejmowanie i operator przypisania złożonego ( +=
).
Dlatego wyrażenie y += 10 - 2 * 3
jest oceniane jako y = y + (10 - (2 * 3))
.
Kroki | Operator | Wyrażenie | Wartość zwrócona z wyrażenia |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Szybka kojarzenie operatorów
Chociaż istnieją predefiniowane reguły zdefiniowane przez pierwszeństwo operatorów do oceny wyrażenia, możesz się zastanawiać, co się stanie, jeśli istnieje wiele operatorów o tym samym poziomie pierwszeństwa. Łączność operatorów definiuje sposób grupowania operatorów o tym samym priorytecie.
W języku Swift operatory mogą być skojarzone lewostronnie, prawostronnie lub nie mogą być skojarzone. Operatory, które są asocjacyjne po lewej stronie, grupują swoje operandy od lewej strony instrukcji, operatory asocjacyjne po prawej stronie od prawej, a operatory bez asocjacji nie mają zdefiniowanego zachowania, gdy są użyte w wyrażeniu w kolejności.
Tabela asocjatywności operatorów
Poniższa tabela przedstawia asocjatywność operatorów Swift wraz z priorytetem.
Szybka asocjatywność biblioteki standardowej (pierwszeństwo od najwyższego do najniższego)Grupy operatorów | Przykłady | Łączność |
---|---|---|
Pierwszeństwo przesunięcia bitowego | >> & <>>> | Żaden |
Pierwszeństwo mnożenia | & *% & * / | lewo |
Dodatkowe pierwszeństwo | | & + & - + - ^ | lewo |
Pierwszeństwo formowania zakresu | … <… | Żaden |
Casting Precedence | jest jak | Żaden |
Priorytet zerowej koalescencji | ?? | dobrze |
Pierwszeństwo porównania | ! => = <= === == | Żaden |
Pierwszeństwo koniunkcji logicznej | && | lewo |
Logiczne pierwszeństwo dysjunkcji | || | lewo |
Domyślne pierwszeństwo | ~> | Żaden |
Pierwszeństwo trójskładnikowe | ?: | dobrze |
Funkcja Pierwszeństwo strzałek | () | dobrze |
Pierwszeństwo przypisania | | =% = / = & <> = & = * = >> = << = = | dobrze |
Przykład 3: Szybka asocjatywność operatorów
let x = 40 / 2 * 10 print(x)
Po uruchomieniu powyższego programu wynik będzie:
200
W powyższym programie wyrażenie jest obliczane od lewej do prawej, ponieważ operatory należą do grup pierwszeństwa mnożenia i mają lewą asocjatywność. Dlatego operacja dzielenia odbywa się wcześniej i otrzymujesz wynik 200 . A co jeśli chcesz najpierw wykonać mnożenie? Musisz 2 * 10
umieścić wyrażenie w nawiasach klamrowych () jako:
let x = 40 / (2 * 10) print(x)
Po uruchomieniu powyższego programu wynik będzie:
2
Nie musisz zapamiętywać pierwszeństwa i tabeli asocjacyjnej. W większości przypadków pierwszeństwo i łączność operatorów ma sens sam w sobie. W razie wątpliwości zawsze możesz skorzystać z tabeli jako odniesienia. Ponadto lepiej jest używać nawiasów, aby kod był łatwiejszy do zrozumienia.