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.
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 = 15
assegna il valore 15 nella variabile y.
Nella successiva espressione y += 10 - 2 * 3
l'operatore di moltiplicazione ha una precedenza maggiore rispetto all'operatore di sottrazione e assegnazione composta ( +=
).
Pertanto, l'espressione y += 10 - 2 * 3
viene valutata come y = y + (10 - (2 * 3))
.
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 * 10
espressione 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.