Προτεραιότητα και συσχέτιση Swift Operator (Με παραδείγματα)

Σε αυτό το άρθρο θα μάθετε για τους κανόνες που χρησιμοποιούνται για την αξιολόγηση μιας έκφρασης με τελεστές και τελεστές.

Γρήγορη προτεραιότητα χειριστή

Προτεραιότητα χειριστή είναι μια συλλογή κανόνων που χρησιμοποιούνται για την αξιολόγηση μιας δεδομένης μαθηματικής έκφρασης. Όταν υπάρχουν αρκετοί τελεστές που χρησιμοποιούνται σε μία μόνο έκφραση, κάθε μέρος αξιολογείται με μια συγκεκριμένη σειρά που ονομάζεται τελεστής προτεραιότητας. Ορισμένοι τελεστές έχουν υψηλότερη προτεραιότητα από άλλους που επηρεάζει τον τρόπο αξιολόγησης μιας έκφρασης.

Πίνακας προτεραιότητας χειριστή

Ο παρακάτω πίνακας παραθέτει την προτεραιότητα των τελεστών στο Swift. Όσο υψηλότερο εμφανίζεται στον πίνακα, τόσο υψηλότερη είναι η προτεραιότητά του.

Ομάδες προτεραιότητας Swift Standard Library (Υψηλότερη έως χαμηλότερη)
Ομάδες χειριστών Παραδείγματα
Προτεραιότητα αλλαγής bitwise >> & <>>>
Προτεραιότητα πολλαπλασιασμού & *% & * /
Προτεραιότητα προσθήκης | & + & - + - ^
Προτεραιότητα σχηματισμού εύρους … <…
Προτεραιότητα στη μετάδοση ειναι οπως
Nil-Coalescing Προτεραιότητα ??
Προτεραιότητα σύγκρισης ! => = <= === ==
Λογική σύμπτωση προτεραιότητα &&
Λογική Διαταραχή Προτεραιότητα ||
Προεπιλεγμένη προτεραιότητα ~>
Ternary Προτεραιότητα ;:
Προτεραιότητα λειτουργικού βέλους ()
Προτεραιότητα ανάθεσης | =% = / = & <> = & = * = >> = << = = + = - =

Παράδειγμα 1: Προτεραιότητα χειριστή Swift

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

Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 29

Στο παραπάνω παράδειγμα, εάν διαβάσετε την έκφραση από αριστερά προς τα δεξιά, ίσως αναμένετε την έξοδο να είναι 45. Ωστόσο, ο τελεστής πολλαπλασιασμού έχει μεγαλύτερη προτεραιότητα από τον τελεστή προσθήκης, οπότε η έκφραση 4 + 5 * 5 αξιολογείται ως 4 + (5 * 5). Επομένως, οι print(x)έξοδοι 29 στην οθόνη.

Βήματα εκτέλεσης
Βήματα Χειριστής Εκφραση Η τιμή επέστρεψε από την έκφραση
1 * 5 * 5 25
2 + 4 + 25 29
3 = εκτύπωση (x) 29

Παράδειγμα 2: Προτεραιότητα χειριστή Swift με σύνθετο χειριστή ανάθεσης

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

Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 19

Στο παραπάνω παράδειγμα, η έκφραση var y = 15εκχωρεί την τιμή 15 στη μεταβλητή y.

Στην επόμενη έκφραση, y += 10 - 2 * 3ο τελεστής πολλαπλασιασμού έχει υψηλότερη προτεραιότητα από τον τελεστή αφαίρεσης & σύνθεσης σύνθεσης ( +=).

Επομένως, η έκφραση y += 10 - 2 * 3αξιολογείται ως y = y + (10 - (2 * 3)).

Βήματα εκτέλεσης
Βήματα Χειριστής Εκφραση Η τιμή επέστρεψε από την έκφραση
1 = var y = 15 15
2 * 2 * 3 6
3 - 10 - 6 4
4 + = 15 + 4 19

Swift Operator Associativity

Παρόλο που υπάρχουν προκαθορισμένοι κανόνες που καθορίζονται από την προτεραιότητα του χειριστή για την αξιολόγηση μιας έκφρασης, ίσως αναρωτιέστε τι θα συμβεί εάν υπάρχουν πολλοί τελεστές του ίδιου επιπέδου προτεραιότητας. Η συνάφεια χειριστή καθορίζει τον τρόπο ομαδοποίησης των χειριστών της ίδιας προτεραιότητας.

Στο Swift, οι τελεστές μπορούν να είναι είτε αριστερά-συσχετισμοί, δεξιοί-συσχετισμοί ή να μην έχουν συσχετισμό. Οι τελεστές που είναι αριστερά-συσχετισμένοι, ομαδοποιούν τους τελεστές τους από τα αριστερά της δήλωσης, οι δεξιοί-συσχετιστικοί τελεστές από τα δεξιά και οι τελεστές χωρίς συσχετισμό δεν έχουν καθορισμένη συμπεριφορά όταν χρησιμοποιούνται στη σειρά σε μια έκφραση.

Πίνακας συσχέτισης χειριστή

Ο παρακάτω πίνακας δείχνει τη συσχέτιση των τελεστών Swift μαζί με την προτεραιότητα.

Swift Standard Library Associativity (Υψηλότερη έως χαμηλότερη προτεραιότητα)
Ομάδες χειριστών Παραδείγματα Συνεργασία
Προτεραιότητα αλλαγής bitwise >> & <>>> κανένας
Προτεραιότητα πολλαπλασιασμού & *% & * / αριστερά
Προτεραιότητα προσθήκης | & + & - + - ^ αριστερά
Προτεραιότητα σχηματισμού εύρους … <… κανένας
Προτεραιότητα στη μετάδοση ειναι οπως κανένας
Nil-Coalescing Προτεραιότητα ?? σωστά
Προτεραιότητα σύγκρισης ! => = <= === == κανένας
Λογική σύμπτωση προτεραιότητα && αριστερά
Λογική Διαταραχή Προτεραιότητα || αριστερά
Προεπιλεγμένη προτεραιότητα ~> κανένας
Ternary Προτεραιότητα ;: σωστά
Προτεραιότητα λειτουργικού βέλους () σωστά
Προτεραιότητα ανάθεσης | =% = / = & <> = & = * = >> = << = = σωστά

Παράδειγμα 3: Συνεργασία Swift Operator

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

Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 200

Στο παραπάνω πρόγραμμα, η έκφραση αξιολογείται από αριστερά προς τα δεξιά, επειδή οι τελεστές εμπίπτουν σε ομάδες προτεραιότητας πολλαπλασιασμού και έχουν συσχετιστεί αριστερά. Επομένως, η λειτουργία διαίρεσης πραγματοποιείται νωρίτερα και έχετε το αποτέλεσμα 200 . Τι γίνεται αν θέλετε να εκτελέσετε πρώτα τον πολλαπλασιασμό; Πρέπει να τυλίξετε την 2 * 10έκφραση σε αγκύλες ως:

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

Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 2

Δεν χρειάζεται να απομνημονεύσετε την προτεραιότητα και τον συσχετιστικό πίνακα. Τις περισσότερες φορές, η προτεραιότητα και η συνάφεια των χειριστών έχει νόημα από μόνη της. Μπορείτε πάντα να χρησιμοποιήσετε τον πίνακα για αναφορά όταν έχετε αμφιβολίες. Επίσης, είναι καλύτερο να χρησιμοποιήσετε παρένθεση για να καταστήσετε τον κώδικά σας πιο κατανοητό.

ενδιαφέροντα άρθρα...