Στο σημερινό δωρεάν μάθημα GO θα δούμε πως να χρησιμοποιούμε σωστά το switch σαν μια εναλλακτική λύση αντί του συνδυασμού if else.
Η γενική δομή του switch είναι η εξής:
switch structure
switch ; { case : case , : default: }
Το initial statement δουλεύει ακριβώς με τον ίδιο τρόπο όπως και στο if, ενώ το expression δεν είναι το ίδιο. Στο if έχουμε μόνο boolean expression ενώ στο switch μπορούμε να έχουμε και expressions διαφορετικά από boolean.
Και το initial statement όσο και το expression είναι
προαιρετικά. Αν χρησιμοποιήσουμε μόνο το expression, τότε
θα γράψουμε switch
Στο δικό μας παράδειγμα χρησιμοποιούμε statement που στην ουσία είναι απλά μια μεταβλητή. Η τιμή με την οποία ισούται θα ελεγχθεί μέσα από μια σειρά από cases. Εκείνο το case που θα έχει τιμή ίση με εκείνη της τιμής, θα εκτελέσει τον κώδικα που έχουμε γράψει αμέσως μετά τα colons ( : ). Μετά το πέρας εκτέλεσης του κώδικα που ανήκει στο συγκεκριμένο case, το πρόγραμμα μας βγαίνει έξω από το case και συνεχίζει με τον υπόλοιπο κώδικα της εφαρμογής. Όπως και το if else έτσι και το switch εκτελεί τα cases ξεκινώντας από το πρώτο και κατεβαίνοντας προς τα κάτω.
Τέλος, υπάρχει και η λέξη κλειδί default που την χρησιμοποιούμε σαν τελευταία επιλογή αν και εφόσον δεν ενεργοποιηθεί κανένα από τα προηγούμενα cases. Ας δούμε όμως ένα απλό πρόγραμμα εφαρμόζει όλη αυτή την απλή θεωρία για την οποία μόλις μιλήσαμε.
main.go
package main import "fmt" func main() { grade := "B" switch grade { case "A": fmt.Println("Excellent!") case "B": fmt.Println("Almost perfect") case "C": fmt.Println("Well done") case "D": fmt.Println("You passed") case "F": fmt.Println("Better try again") default: fmt.Println("Invalid grade") } fmt.Println("Your grade is a ", grade) }
Output
Almost perfect Your grade is a B
Το πρόγραμμα μας ξεκινάει με την ανάθεση ενός string σε μια μεταβλητή με το όνομα grade. Στην αμέσως επόμενη γραμμή κώδικα, περνάμε στο switch την μεταβλητή για την οποία το πρόγραμμα θα πάρει κάποιες αποφάσεις ανάλογα με την τιμή της. Η τιμή της μεταβλητής συγκρίνεται με κάθε ένα από τα cases που έχουμε ορίσει. Εάν η τιμή του case είναι ίδια με αυτή της μεταβλητής, τότε ο κώδικας που ακολουθεί μετά το colon (:) θα εκτελεστεί. Εάν κανένα από τα cases δεν επαληθευτούν, τότε θα ενεργοποιηθεί το default. Αν και η επιλογή default είναι προαιρετική, είναι χρήσιμη έτσι ώστε πάντα το πρόγραμμα μας να επιλέγει κάποιο γκρουπ κώδικα να τρέξει, ακόμα και αν κανένα case δεν επαληθεύεται.
Αν και η δομή του switch είναι απλή, αυτό δεν σημαίνει ότι δεν μπορεί να υποστηρίξει πιο σύνθετες συγκρίσεις. Ας κάνουμε δύο αλλαγές στο αρχικό μας πρόγραμμα.
main.go
package main import "fmt" func main() { switch grade := "B"; { case grade == "A": fmt.Println("Excellent!") case grade == "B" || grade == "C": fmt.Println("Well done") case grade == "D": fmt.Println("You passed") case grade == "F": fmt.Println("Better try again") default: fmt.Println("Invalid grade") } }
Output
Well done