Δήλωση γρήγορης φρουράς (με παραδείγματα)

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

Το Swift If Statement περιγράφει πώς μπορείτε να εκτελέσετε ενέργειες βάσει συγκεκριμένης συνθήκης (boolean value). Σε αυτό το άρθρο, θα διερευνήσουμε τα πλεονεκτήματα της δήλωσης φύλαξης εάν η δήλωση για τον έλεγχο της ροής του προγράμματος και θα γράψουμε πιο απλούστερο και καθαρό κώδικα.

Δήλωση Swift Guard

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

Επιπλέον, οι δηλώσεις εντός του προφυλακτήρα πρέπει να βγούν από το πεδίο εφαρμογής. Ως εκ τούτου, θα πρέπει να δηλώσεις τον έλεγχο του προγράμματος του χρήστη return, break, continueή throwστο τέλος της δήλωσης φρουράς.

Σύνταξη της δήλωσης φρουράς

 guard express else (// statement // πρέπει να περιέχει μια δήλωση ελέγχου: επιστροφή, διακοπή, συνέχιση ή ρίψη.) 
  • Εδώ, η έκφραση είναι μια δυαδική έκφραση (επιστρέφει είτε trueείτε false).
  • Εάν αξιολογηθεί η έκφραση false, guardεκτελούνται δηλώσεις εντός του μπλοκ κώδικα του .
  • Εάν αξιολογηθεί η έκφραση true, οι δηλώσεις εντός του μπλοκ κώδικα του guardπαραλείπονται από την εκτέλεση.

Πώς λειτουργεί η δήλωση φρουράς;

Σημείωση: Το τέλος της δήλωσης φρουράς πρέπει να περιέχει δήλωση ελέγχου return, break, continueή throw.

Παράδειγμα 1: Πώς λειτουργεί η δήλωση φρουράς;

Μια απλή έγκυρη δήλωση φύλαξης έχει ως εξής:

 guard true else ( print("Condition not met") ) print("Condition met") 

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

 Η συνθήκη πληροί

Στο παραπάνω πρόγραμμα, το guard περιέχει μια τιμή boolean true (πληρούται η συνθήκη). Επειδή, οι δηλώσεις φύλαξης εκτελούνται μόνο όταν δεν πληρούται η συνθήκη, η δήλωση μέσα στο φύλακα δεν εκτελείται. Γι ' print("Condition met")αυτό εκτελείται και οι συνθήκες εξέρχονται στην οθόνη.

Τώρα ας αλλάξουμε την κατάσταση σε false ως:

Παράδειγμα 2: η δήλωση φύλαξης πρέπει να βγεί από το πεδίο εφαρμογής

 guard false else ( print("Condition not met") ) print("Condition met") 

Στο παραπάνω πρόγραμμα, η κατάσταση φρουράς αξιολογείται ως false. Έτσι, η δήλωση print("Condition not met")μέσα σε άλλο θα πρέπει να εκτελεστεί. Ωστόσο, θα εμφανιστεί ένα σφάλμα που λέει ότι το σώμα «φρουράς» ενδέχεται να μην πέσει, σκεφτείτε να χρησιμοποιήσετε ένα «επιστροφή» ή «ρίξτε» για να βγείτε από το πεδίο εφαρμογής.

Το μήνυμα σφάλματος με απλά μέσα λέξη, θα πρέπει να μεταφέρει τον έλεγχο του προγράμματος από τη δήλωση φρουρά, χρησιμοποιώντας return, break, continueή throwδηλώσεις. Προς το παρόν πρόκειται να χρησιμοποιήσουμε return. Και δεδομένου ότι η returnδήλωση μπορεί να χρησιμοποιηθεί μόνο μέσα σε μια συνάρτηση, πρόκειται να τυλίξουμε τον παραπάνω κώδικα στο Swift Functions.

Παράδειγμα 3: δήλωση προστασίας μέσα σε μια συνάρτηση

Μπορούμε να χρησιμοποιήσουμε τη δήλωση προστασίας μέσα σε μια συνάρτηση στο Swift ως:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

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

 Η συνθήκη δεν ικανοποιήθηκε Γεια σας μετά την κλήση λειτουργίας 

Στο παραπάνω πρόγραμμα, η κατάσταση φύλακα αξιολογείται false, επομένως εκτελούνται οι δηλώσεις εντός του φύλακα. Η πρώτη δήλωση print("Condition not met")εξάγει την κατάσταση που δεν πληρούται στην κονσόλα.

Και η δήλωση returnτερματίζει την εκτέλεση μιας συνάρτησης και η δήλωση print("Hello, after function call")μετά την εκτέλεση της κλήσης συνάρτησης που εξάγει Γεια μετά από κλήση συνάρτησης στην κονσόλα.

Παράδειγμα 4: Φρουρά με προαιρετικά

Έχουμε δει στο Swift Optionals τη χρήση του if-letγια να ξετυλίξετε ένα προαιρετικό. Ωστόσο, μπορούμε επίσης να χρησιμοποιήσουμε τη δήλωση φύλαξης στη θέση του if-letγια την αποσυσκευασία ενός προαιρετικού με ένα πλεονέκτημα. Το κύριο πλεονέκτημα της αποσυσκευασίας ενός προαιρετικού με προφυλακτήρα αντί if-letείναι ότι μπορούμε να αυξήσουμε το εύρος της μη τυλιγμένης μεταβλητής.

Ας το δούμε στο παρακάτω παράδειγμα:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

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

Το όνομα είναι μηδέν. Δεν είναι δυνατή η επεξεργασία

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

Λοιπόν, οι δηλώσεις εντός του guard other εκτελούν το οποίο τυπώνει το Name is nil. Δεν είναι δυνατή η επεξεργασία στην έξοδο και τερματίζει τη λειτουργία με returnδήλωση. Ο ισοδύναμος κωδικός της παραπάνω δήλωσης φύλαξης if-else είναι:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Σημείωση παραπάνω δύο δηλώσεις είναι και οι δύο έγκυρες και κάνουν την ίδια δουλειά. Όμως, χρησιμοποιώντας τη δήλωση if-let δεν μπορείτε να χρησιμοποιήσετε την ανακεφαλαιωμένη τιμή εκτός της δήλωσης if-let. Αλλά με τη δήλωση φύλαξης μπορείτε να χρησιμοποιήσετε τη μη ξετυλιγμένη τιμή μέσω της λειτουργίας.

Παράδειγμα 5: Φρουρά με πολλαπλές συνθήκες

Οι δηλώσεις φρουράς μπορούν επίσης να αλυσίσουν πολλαπλές συνθήκες διαχωρισμένες με κόμμα (,) ως:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

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

Το όνομα είναι μηδέν ή μια κενή συμβολοσειρά. Δεν είναι δυνατή η επεξεργασία

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

Η πρώτη συνθήκη let temp = nameξετυλίγει ένα προαιρετικό που επιστρέφει trueστην περίπτωσή μας και η δεύτερη συνθήκη temp.count> 0ελέγχει εάν η μη τυλιγμένη συμβολοσειρά έχει περισσότερους από 0 χαρακτήρες που αξιολογούνται falseστο παράδειγμά μας.

Επομένως, η δήλωση μέσα στη δήλωση φύλαξης εκτελεί δήλωση print("Name is nil or an empty string. Cannot process")που εξάγει το Όνομα είναι μηδέν ή μια κενή συμβολοσειρά. Δεν είναι δυνατή η επεξεργασία στην κονσόλα και τερματίζει τη λειτουργία με returnδήλωση.

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