Rask operatørprioritet og assosiativitet (med eksempler)

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.

Utførelse trinn
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 = 15tilordner uttrykket verdi 15 i variabelen y.

I neste uttrykk y += 10 - 2 * 3har multiplikasjonsoperatoren høyere prioritet enn subtraksjon og sammensatt tildelingsoperator ( +=).

Derfor blir uttrykket y += 10 - 2 * 3vurdert som y = y + (10 - (2 * 3)).

Utførelse trinn
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 * 10uttrykket 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å.

Interessante artikler...