Precedenza e associatività degli operatori Swift (con esempi)

In questo articolo imparerai le regole utilizzate per valutare un'espressione con operatori e operandi.

Precedenza degli operatori Swift

La precedenza degli operatori è una raccolta di regole utilizzate per valutare una data espressione matematica. Quando sono presenti più operatori utilizzati in una singola espressione, ogni parte viene valutata in un certo ordine chiamato come precedenza degli operatori. Alcuni operatori hanno una priorità maggiore di altri, il che influisce sul modo in cui viene valutata un'espressione.

Tabella di precedenza degli operatori

La tabella seguente elenca la precedenza degli operatori in Swift. Più in alto appare nella tabella, maggiore è la sua precedenza.

Gruppi di precedenza delle librerie Swift Standard (dal più alto al più basso)
Gruppi di operatori Esempi
Priorità di spostamento bit per bit >> & <>>>
Precedenza di moltiplicazione & *% & * /
Precedenza addizione | & + & - + - ^
Precedenza formazione intervallo … <…
Precedenza casting é come
Precedenza a coalescenza nulla ??
Precedenza di confronto ! => = <= === ==
Precedenza della congiunzione logica &&
Precedenza della disgiunzione logica ||
Precedenza predefinita ~>
Precedenza ternaria ?:
Funzione Freccia precedenza ()
Precedenza assegnazione | =% = / = & <> = & = * = >> = << = = + = - =

Esempio 1: precedenza degli operatori Swift

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

Quando esegui il programma sopra, l'output sarà:

 29

Nell'esempio precedente, se leggi l'espressione da sinistra a destra, potresti aspettarti che l'output sia 45. Tuttavia, l'operatore di moltiplicazione ha una precedenza maggiore dell'operatore di addizione, quindi l'espressione 4 + 5 * 5 viene valutata come 4 + (5 * 5). Pertanto visualizza print(x)29 sullo schermo.

Fasi di esecuzione
Passi Operatore Espressione Valore restituito dall'espressione
1 * 5 * 5 25
2 + 4 + 25 29
3 = stampa (x) 29

Esempio 2: precedenza dell'operatore Swift con operatore di assegnazione complessa

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

Quando esegui il programma sopra, l'output sarà:

 19

Nell'esempio precedente, l'espressione var y = 15assegna il valore 15 nella variabile y.

Nella successiva espressione y += 10 - 2 * 3l'operatore di moltiplicazione ha una precedenza maggiore rispetto all'operatore di sottrazione e assegnazione composta ( +=).

Pertanto, l'espressione y += 10 - 2 * 3viene valutata come y = y + (10 - (2 * 3)).

Fasi di esecuzione
Passi Operatore Espressione Valore restituito dall'espressione
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Swift Operator Associativity

Sebbene esistano regole predefinite definite dalla precedenza degli operatori per valutare un'espressione, ci si potrebbe chiedere cosa succede se sono presenti più operatori dello stesso livello di precedenza. L'associatività degli operatori definisce il modo in cui gli operatori con la stessa precedenza vengono raggruppati.

In Swift, gli operatori possono essere associativi a sinistra, associativi a destra o non avere associatività. Gli operatori che sono associativi a sinistra, raggruppano i loro operandi dalla sinistra dell'istruzione, gli operatori associativi a destra dalla destra e gli operatori senza associatività non hanno un comportamento definito quando usati in sequenza in un'espressione.

Tabella associatività operatore

La tabella seguente mostra l'associatività degli operatori Swift insieme alla precedenza.

Associatività della libreria Swift Standard (precedenza dalla più alta alla più bassa)
Gruppi di operatori Esempi Associatività
Priorità di spostamento bit per bit >> & <>>> nessuna
Precedenza di moltiplicazione & *% & * / sinistra
Precedenza addizione | & + & - + - ^ sinistra
Precedenza formazione intervallo … <… nessuna
Precedenza casting é come nessuna
Precedenza a coalescenza nulla ?? destra
Precedenza di confronto ! => = <= === == nessuna
Precedenza della congiunzione logica && sinistra
Precedenza della disgiunzione logica || sinistra
Precedenza predefinita ~> nessuna
Precedenza ternaria ?: destra
Funzione Freccia precedenza () destra
Precedenza assegnazione | =% = / = & <> = & = * = >> = << = = destra

Esempio 3: Swift Operator Associativity

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

Quando esegui il programma sopra, l'output sarà:

 200

Nel programma precedente, l'espressione viene valutata da sinistra a destra perché gli operatori rientrano in gruppi di precedenza di moltiplicazione e hanno associatività a sinistra. Pertanto, l'operazione di divisione avviene prima e ottieni il risultato 200 . E se volessi eseguire prima la moltiplicazione? È necessario racchiudere l' 2 * 10espressione tra parentesi graffe () come:

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

Quando esegui il programma sopra, l'output sarà:

 2

Non è necessario memorizzare la tabella di precedenza e associativa. La maggior parte delle volte, la precedenza e l'associatività degli operatori ha senso in sé. Puoi sempre utilizzare la tabella come riferimento in caso di dubbio. Inoltre, è meglio usare le parentesi per rendere il codice più facile da capire.

Articoli interessanti...