I denne artikkelen vil du lære om reglene som brukes til å evaluere et uttrykk med operatører og operander.
Rask operatørprioritet
Operatørprioritet er en samling regler som brukes for å evaluere et gitt matematisk uttrykk. Når det er flere operatorer som brukes i et enkelt uttrykk, blir hver del evaluert i en bestemt rekkefølge kalt operatørprioritet. Enkelte operatører har høyere prioritet enn andre, noe som påvirker hvordan et uttrykk blir evaluert.
Operatørens forrangstabell
Tabellen nedenfor viser prioriteten til operatører i Swift. Jo høyere det vises i tabellen, jo høyere er dens forrang.
Swift Standard Library-prioritetsgrupper (høyest til lavest)Operatørgrupper | Eksempler |
---|---|
Bitvis skiftprioritet | >> & <>>> |
Multiplikasjonsprioritet | & *% & * / |
Tilleggsprioritet | | & + & - + - ^ |
Områdedannelse | … <… |
Casting Precedence | er som |
Nil-Coalescing Precedence | ?? |
Sammenligning forrang | ! => = <= === == |
Logisk konjunksjonsprioritet | && |
Logisk disjunksjon forrang | || |
Standard forrang | ~> |
Ternary Precedence | ?: |
Funksjon Pilprioritet | () |
Oppgaveprioritet | | =% = / = & <> = & = * = >> = << = = + = - = |
Eksempel 1: Swift Operator Precedence
let x = 4 + 5 * 5 print(x)
Når du kjører programmet ovenfor, vil utdataene være:
29
I eksemplet ovenfor, hvis du leser uttrykket fra venstre mot høyre, kan du forvente at utgangen er 45. Men multiplikasjonsoperator har høyere prioritet enn tilleggsoperator, slik at uttrykket 4 + 5 * 5
blir evaluert som 4 + (5 * 5)
. Derfor print(x)
sender 29 i skjermen.
Fremgangsmåte | Operatør | Uttrykk | Verdien returneres fra uttrykket |
---|---|---|---|
1 | * | 5 * 5 | 25 |
2 | + | 4 + 25 | 29 |
3 | = | skrive ut (x) | 29 |
Eksempel 2: Swift Operator Precedence med komplisert oppdragsoperatør
var y = 15 y += 10 - 2 * 3 print(y)
Når du kjører programmet ovenfor, vil utdataene være:
19
I eksemplet ovenfor var y = 15
tilordner uttrykket verdi 15 i variabelen y.
I neste uttrykk y += 10 - 2 * 3
har multiplikasjonsoperatoren høyere prioritet enn subtraksjon og sammensatt tildelingsoperator ( +=
).
Derfor blir uttrykket y += 10 - 2 * 3
vurdert som y = y + (10 - (2 * 3))
.
Fremgangsmåte | Operatør | Uttrykk | Verdien returneres fra uttrykket |
1 | = | var y = 15 | 15 |
2 | * | 2 * 3 | 6 |
3 | - | 10 - 6 | 4 |
4 | + = | 15 + 4 | 19 |
Rask operatørforening
Selv om det er forhåndsdefinerte regler definert av operatørprioritet for å evaluere et uttrykk, lurer du kanskje på hva som skjer hvis det er flere operatører med samme prioritetsnivå. Operatørens assosiativitet definerer hvordan operatører med samme forrang er gruppert sammen.
I Swift kan operatører være enten venstreassosiative, høyreassosiative eller ikke ha associativitet. Operatører som er venstreassosiative, grupperer operandene sine fra venstre for uttalelsen, høyreassosierende operatorer fra høyre og operatorer uten assosiativitet har ingen definert oppførsel når de brukes i rekkefølge i et uttrykk.
Operatørens assosiativitetstabell
Tabellen nedenfor viser assosiativiteten til Swift-operatører sammen med forrang.
Rask standard biblioteksassociativitet (forrang høyest til lavest)Operatørgrupper | Eksempler | Assosiativitet |
---|---|---|
Bitvis skiftprioritet | >> & <>>> | ingen |
Multiplikasjonsprioritet | & *% & * / | venstre |
Tilleggsprioritet | | & + & - + - ^ | venstre |
Områdedannelse | … <… | ingen |
Casting Precedence | er som | ingen |
Nil-Coalescing Precedence | ?? | Ikke sant |
Sammenligning forrang | ! => = <= === == | ingen |
Logisk konjunksjonsprioritet | && | venstre |
Logisk disjunksjon forrang | || | venstre |
Standard forrang | ~> | ingen |
Ternary Precedence | ?: | Ikke sant |
Funksjon Pilprioritet | () | Ikke sant |
Oppgaveprioritet | | =% = / = & <> = & = * = >> = << = = | Ikke sant |
Eksempel 3: Swift Operator Associativity
let x = 40 / 2 * 10 print(x)
Når du kjører programmet ovenfor, vil utdataene være:
200
I det ovennevnte programmet blir uttrykket evaluert fra venstre til høyre fordi operatørene faller inn i multiplikasjonsprioritetsgrupper og har forlatt assosiativitet. Derfor foregår delingsoperasjonen tidligere, og du får resultatet 200 . Hva om du først vil utføre multiplikasjonen? Du må pakke inn 2 * 10
uttrykket i () seler som:
let x = 40 / (2 * 10) print(x)
Når du kjører programmet ovenfor, vil utdataene være:
2
Du trenger ikke å huske forrang og tabell. Mesteparten av tiden gir forrang og tilknytning til operatører mening i seg selv. Du kan alltid bruke tabellen som referanse når du er i tvil. Det er også bedre å bruke parentes for å gjøre koden lettere å forstå.