Voorrang en associativiteit van Swift Operator (met voorbeelden)

In dit artikel leert u over de regels die worden gebruikt om een ​​uitdrukking met operatoren en operanden te evalueren.

Swift Operator voorrang

Operatorprioriteit is een verzameling regels die worden gebruikt om een ​​bepaalde wiskundige uitdrukking te evalueren. Als er in een enkele uitdrukking meerdere operatoren worden gebruikt, wordt elk onderdeel in een bepaalde volgorde geëvalueerd, de zogenaamde operatorprioriteit. Bepaalde operatoren hebben een hogere prioriteit dan andere, wat van invloed is op hoe een uitdrukking wordt geëvalueerd.

Operatorprioriteitstabel

De onderstaande tabel geeft de voorrang van operators in Swift weer. Hoe hoger het in de tabel staat, hoe hoger de prioriteit.

Swift Standard Library Prioriteitsgroepen (van hoog naar laag)
Operator groepen Voorbeelden
Bitwise shift prioriteit >> & <>>>
Voorrang voor vermenigvuldiging & *% & * /
Voorrang voor toevoeging | & + & - + - ^
Bereikvorming prioriteit … <…
Casting voorrang is als
Nihil-coalescerende prioriteit ??
Voorrang bij vergelijking ! => = <= === ==
Logische combinatie voorrang &&
Logische disjunctie voorrang ||
Standaard prioriteit ~>
Ternaire voorrang ?:
Functie Pijl voorrang ()
Toewijzing prioriteit | =% = / = & <> = & = * = >> = << = = + = - =

Voorbeeld 1: Voorrang voor snelle operators

 let x = 4 + 5 * 5 print(x) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 29

Als u in het bovenstaande voorbeeld de uitdrukking van links naar rechts leest, zou u kunnen verwachten dat de uitvoer 45 is. Maar de operator voor vermenigvuldigen heeft een hogere prioriteit dan de operator voor optellen, dus de uitdrukking 4 + 5 * 5 wordt geëvalueerd als 4 + (5 * 5). Daarom print(x)voert 29 op het scherm uit.

Uitvoeringsstappen
Stappen Operator Uitdrukking Waarde geretourneerd uit expressie
1 * 5 * 5 25
2 + 4 + 25 29
3 = afdruk (x) 29

Voorbeeld 2: Snelle operator voorrang met complexe toewijzingsoperator

 var y = 15 y += 10 - 2 * 3 print(y) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 19

In het bovenstaande voorbeeld var y = 15wijst de uitdrukking waarde 15 toe in de variabele y.

In de volgende uitdrukking heeft y += 10 - 2 * 3de operator voor vermenigvuldiging een hogere prioriteit dan de operator voor aftrekken en samengestelde toewijzing ( +=).

Daarom wordt de uitdrukking y += 10 - 2 * 3geëvalueerd als y = y + (10 - (2 * 3)).

Uitvoeringsstappen
Stappen Operator Uitdrukking Waarde geretourneerd uit expressie
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Swift Operator Associativity

Hoewel er vooraf gedefinieerde regels zijn gedefinieerd door de prioriteit van operators om een ​​uitdrukking te evalueren, vraagt ​​u zich misschien af ​​wat er gebeurt als er meerdere operators met hetzelfde voorrangsniveau zijn. De operatorassociativiteit definieert hoe operators met dezelfde prioriteit worden gegroepeerd.

In Swift kunnen operators ofwel links-associatief, rechts-associatief zijn of geen associativiteit hebben. Operatoren die links-associatief zijn, groeperen hun operanden vanaf de linkerkant van de instructie, rechts-associatieve operators vanaf de rechterkant en operators zonder associativiteit hebben geen gedefinieerd gedrag wanneer ze achtereenvolgens in een uitdrukking worden gebruikt.

Operator associativiteitstabel

De onderstaande tabel toont de associativiteit van Swift-operators samen met de prioriteit.

Swift Standard Library Associativity (prioriteit van hoogste naar laagste)
Operator groepen Voorbeelden Associativiteit
Bitwise shift prioriteit >> & <>>> geen
Voorrang voor vermenigvuldiging & *% & * / links
Voorrang voor toevoeging | & + & - + - ^ links
Bereikvorming prioriteit … <… geen
Casting voorrang is als geen
Nihil-coalescerende prioriteit ?? Rechtsaf
Voorrang bij vergelijking ! => = <= === == geen
Logische combinatie voorrang && links
Logische disjunctie voorrang || links
Standaard prioriteit ~> geen
Ternaire voorrang ?: Rechtsaf
Functie Pijl voorrang () Rechtsaf
Toewijzing prioriteit | =% = / = & <> = & = * = >> = << = = Rechtsaf

Voorbeeld 3: Swift Operator Associativity

 let x = 40 / 2 * 10 print(x) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 200

In het bovenstaande programma wordt de uitdrukking van links naar rechts geëvalueerd omdat de operatoren in groepen met voorrang voor vermenigvuldiging vallen en associativiteit hebben. Daarom vindt de deelbewerking eerder plaats en krijgt u het resultaat 200 . Wat als u de vermenigvuldiging eerst wilt uitvoeren? U moet de 2 * 10uitdrukking tussen accolades () plaatsen als:

 let x = 40 / (2 * 10) print(x) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 2

U hoeft de prioriteit en de associatieve tabel niet te onthouden. Meestal zijn de voorrang en associativiteit van operators op zichzelf logisch. U kunt bij twijfel altijd de tabel gebruiken als referentie. Het is ook beter om haakjes te gebruiken om uw code begrijpelijker te maken.

Interessante artikelen...