I denne artikel lærer du om de regler, der bruges til at evaluere et udtryk med operatorer og operander.
Hurtig operatørs forrang
Operatørprioritet er en samling af regler, der bruges til at evaluere et givet matematisk udtryk. Når der er flere operatorer brugt i et enkelt udtryk, evalueres hver del i en bestemt rækkefølge kaldet operatørprioritet. Visse operatører har højere prioritet end andre, hvilket påvirker, hvordan et udtryk vurderes.
Operatørens forrangstabel
Nedenstående tabel viser forrang for operatører i Swift. Jo højere det vises i tabellen, jo højere er dets forrang.
Swift Standard Library-prioritetsgrupper (højest til lavest)Operatørgrupper | Eksempler |
---|---|
Bitvis skift forrang | >> & <>>> |
Multiplikationsforrang | & *% & * / |
Tilføjelse forrang | | & + & - + - ^ |
Område dannelse forrang | … <… |
Casting forrang | er som |
Nil-koalescerende præcedens | ?? |
Sammenligning forrang | ! => = <= === == |
Logisk konjunktionspræcedens | && |
Logisk disjunktionspræference | || |
Standardpræference | ~> |
Ternær forrang | ?: |
Funktion Pilprioritet | () |
Opgavens forrang | | =% = / = & <> = & = * = >> = << = = + = - = |
Eksempel 1: Hurtig operatørpræference
let x = 4 + 5 * 5 print(x)
Når du kører ovenstående program, vil output være:
29
I ovenstående eksempel, hvis du læser udtrykket fra venstre mod højre, kan du forvente, at output er 45. Men multiplikationsoperator har en højere prioritet end additionsoperator, så udtrykket 4 + 5 * 5
evalueres som 4 + (5 * 5)
. Derfor print(x)
udsender 29 i skærmen.
Trin | Operatør | Udtryk | Værdi returneret fra udtryk |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | udskrive (x) | 29 |
Eksempel 2: Hurtig operatørpræference med kompleks tildelingsoperatør
var y = 15 y += 10 - 2 * 3 print(y)
Når du kører ovenstående program, vil output være:
19
I ovenstående eksempel var y = 15
tildeler udtrykket værdi 15 i variablen y.
I det næste udtryk y += 10 - 2 * 3
har multiplikationsoperatoren en højere prioritet end subtraktion og sammensat tildelingsoperator ( +=
).
Derfor y += 10 - 2 * 3
vurderes udtrykket som y = y + (10 - (2 * 3))
.
Trin | Operatør | Udtryk | Værdi returneret fra udtryk |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Hurtig operatørassociativitet
Selvom der er foruddefinerede regler defineret af operatorens forrang for at evaluere et udtryk, undrer du dig måske over, hvad der sker, hvis der er flere operatorer med samme prioritetsniveau. Operatørens associativitet definerer, hvordan operatører med samme forrang er grupperet sammen.
I Swift kan operatører være enten venstreassociative, højreassocierende eller ikke have nogen associativitet. Operatører, der er venstreassociative, grupperer deres operander fra venstre for udsagnet, højreassociative operatorer fra højre og operatorer uden associativitet har ingen defineret adfærd, når de bruges i rækkefølge i et udtryk.
Operatørens associativitetstabel
Tabellen nedenfor viser associeringsevnen for Swift-operatører sammen med forrang.
Hurtig standardbibliotekassociativitet (forrang højest til lavest)Operatørgrupper | Eksempler | Associativitet |
---|---|---|
Bitvis skift forrang | >> & <>>> | ingen |
Multiplikationsforrang | & *% & * / | venstre |
Tilføjelse forrang | | & + & - + - ^ | venstre |
Område dannelse forrang | … <… | ingen |
Casting forrang | er som | ingen |
Nil-koalescerende præcedens | ?? | ret |
Sammenligning forrang | ! => = <= === == | ingen |
Logisk konjunktionspræcedens | && | venstre |
Logisk disjunktionspræference | || | venstre |
Standardpræference | ~> | ingen |
Ternær forrang | ?: | ret |
Funktion Pilprioritet | () | ret |
Opgavens forrang | | =% = / = & <> = & = * = >> = << = = | ret |
Eksempel 3: Swift Operator Associativity
let x = 40 / 2 * 10 print(x)
Når du kører ovenstående program, vil output være:
200
I ovenstående program evalueres udtrykket fra venstre mod højre, fordi operatorerne falder i multiplikationsprioritetsgrupper og har forladt associativitet. Derfor foregår delingsoperationen tidligere, og du får resultatet 200 . Hvad hvis du først vil udføre multiplikationen? Du skal pakke 2 * 10
udtrykket ind i () seler som:
let x = 40 / (2 * 10) print(x)
Når du kører ovenstående program, vil output være:
2
Du behøver ikke at huske forrang og associerende tabel. For det meste giver operatørernes forrang og associativitet mening i sig selv. Du kan altid bruge tabellen til reference, når du er i tvivl. Det er også bedre at bruge parentes for at gøre din kode lettere at forstå.