Hurtig operatørs forrang og associativitet (med eksempler)

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.

Udførelsestrin
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 = 15tildeler udtrykket værdi 15 i variablen y.

I det næste udtryk y += 10 - 2 * 3har multiplikationsoperatoren en højere prioritet end subtraktion og sammensat tildelingsoperator ( +=).

Derfor y += 10 - 2 * 3vurderes udtrykket som y = y + (10 - (2 * 3)).

Udførelsestrin
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 * 10udtrykket 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å.

Interessante artikler...