FREE

ΕΝΟΤΗΤΑ 7 GO - The switch Statement

Στο σημερινό δωρεάν μάθημα GO θα δούμε πως να χρησιμοποιούμε σωστά το switch σαν μια εναλλακτική λύση αντί του συνδυασμού if else.

Η γενική δομή του switch είναι η εξής:

switch structure

                    
switch <initial statement>; <expression> {
    case <expression>:
        <statements>
    case <expression>, <expression>:
        <statements>
    default:
        <statements>
    }

Το initial statement δουλεύει ακριβώς με τον ίδιο τρόπο όπως και στο if, ενώ το expression δεν είναι το ίδιο. Στο if έχουμε μόνο boolean expression ενώ στο switch μπορούμε να έχουμε και expressions διαφορετικά από boolean.

Και το initial statement όσο και το expression είναι προαιρετικά. Αν χρησιμοποιήσουμε μόνο το expression, τότε θα γράψουμε switch {, ενώ αν έχουμε μόνο το initial statement θα γράψουμε switch ; {. Εάν δεν γράψουμε κανένα από αυτά, τότε περνάμε την τιμή true στο 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 είναι απλή, αυτό δεν σημαίνει ότι δεν μπορεί να υποστηρίξει πιο σύνθετες συγκρίσεις. Ας κάνουμε δύο αλλαγές στο αρχικό μας πρόγραμμα.

  • Γράφουμε ένα expression αυτή τη φορά μέσα στο switch αντί να περάσουμε μόνο την μεταβλητή.
  • Χρησιμοποιούμε logical operators για να δείξουμε το ίδιο μήνυμα εάν η επιλογή είναι B ή C.

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