FREE

ΕΝΟΤΗΤΑ 6 GO - The if else Statement

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

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

Σαν block ορίζουμε μια ομάδα από statements που η αρχή του και το τέλος του ορίζεται από braces ( { } ). Όλες οι μεταβλητές που θα οριστούν μέσα στο block μπορούν να χρησιμοποιηθούν μόνο από κώδικα μέσα στο ίδιο block. Με άλλα λόγια, το εύρος δράσης της μεταβλητής (δηλαδή ποιος μπορεί να την δει και να την καλέσει) είναι μόνο μέσα στο ίδιο block. Αυτό ονομάζεται local scope.

block of statements

{
    statement1;
    statement2;
    statement3;
}
             

Ας δούμε ένα παράδειγμα στο οποίο θα προσθέσουμε και επιπρόσθετα σχόλια στον κώδικα για να μπορέσετε να κατανοήσετε απόλυτα την έννοια του local scope.

main.go

package main

func main() {
    var num1 int        //Declare a variable num1
    {                   // Start of a block statement
        var num2 int    //Declare a num2 variable inside the block
        num2 = 200      //num2 is local to this block

        num1 = 100      //num1 is declared outside the block, so
                        //from inside the block we can reach it
    }                   // End of the block statement

    num2 = 50           // A compile-time error. num2 has been declared inside
                        // a block and so it cannot be used outside that block
                        //This program can not be compiled.
}

                 

Output

# command-line-arguments
.\main.go:13:2: undefined: num2
              

Η χρησιμότητα που block γίνεται πιο ξεκάθαρη όταν χρησιμοποιείται σε συνδυασμό με τα if statements. Το if προσθέτει την δυνατότητα στον κώδικα μας να παίρνει αποφάσεις βασιζόμενο στο αποτέλεσμα κάποιας true/false συνθήκης.

Το if statement αποτελείται από ένα boolean expression και αμέσως μετά ακολουθούν ένα ή και περισσότερα statements. Ο γενικός κανόνας για να γράφουμε if statements είναι ο ακόλουθος:

if statement

if Boolean_expression
   {
       //Statements will execute if the Boolean expression is true
   }
  

Εάν το boolean expression είναι true, τότε τα statements μέσα στο block κώδικα που ακολουθεί θα εκτελεστούν. Εάν όμως το boolean expression είναι false, τότε δεν θα εκτελεστούν τα statements μέσα στα άγκιστρα, το πρόγραμμα θα τα παραβλέψει και θα συνεχίσει με την εκτέλεση του υπόλοιπου κώδικα της εφαρμογής που ακολουθεί αμέσως μετά από το κλείσιμο του άγκιστρου του block.

Ας δούμε όμως ένα απλό παράδειγμα που χρησιμοποιεί τα if statements.

main.go

package main

import "fmt"

func main() {
    var x float64 = 10.0
    var half float64 = 0.0

    if x != 0 {
        half = x / 2.0
        fmt.Println(x, "/ 2 = ", half)
    }

    if x == 0 {
        fmt.Println("The value of x is 0")
    }

}

Output

10 / 2 =  5

Ας κάνουμε μερικές παρατηρήσεις στον πιο πάνω κώδικα. Σαν αρχή παρατηρούμε ότι το if πάντα ακολουθείται από μια Boolean expression μέσα στην οποία μπορούμε να χρησιμοποιήσουμε τους πιο κάτω Comparison Operators για να κάνουμε τις διάφορες συγκρίσεις που χρειαζόμαστε.

Δωρεάν Μαθήματα και Σεμινάρια GO

Οι Comparison Operators, θα μπορούσαν να συνδυαστούν και με τους Logical Operators για να δώσουν ακόμα καλύτερο έλεγχο στην ροή του προγράμματος μας.

Δωρεάν Μαθήματα και Σεμινάρια GO

Η πιο πάνω λειτουργία του if statement αν και είναι επιθυμητή δεν είναι και απολύτως τέλεια γιατί όταν η συνθήκη είναι true τότε εκτελούνται τα statements και έχουμε τον έλεγχο στην ροή εκτέλεσης του προγράμματος. Όταν όμως η συνθήκη είναι false, το πρόγραμμα συνεχίζει με τον υπόλοιπο κώδικα. Συνήθως, θέλουμε να πιάσουμε και τις δύο περιπτώσεις έτσι ώστε να έχουμε τον απόλυτο έλεγχο στο τι θα εκτελεστεί στον κώδικα μας είτε έχουμε true αποτέλεσμα από την if συνθήκη είτε έχουμε false.

Επίσης, θα επιθυμούσαμε να μην εκτελούνται όλα τα if statements αλλά μόνο εκείνο που ικανοποιεί την συνθήκη και μετά να αγνοηθούν όλα τα υπόλοιπα. Αυτό μπορούμε να το πετύχουμε με την προσθήκη του else όπως δείχνει και το πιο κάτω παράδειγμα:

main.go

package main

import "fmt"

func main() {
    var score int = 79
    var grade string

    if score >= 90 {
        grade = "A"
        fmt.Println("Way to go!")
    } else if score >= 80 {
        grade = "B"
        fmt.Println("Good job!")
    } else if score >= 70 && score < 80 {
        grade = "C"
    } else if score >= 60 {
        grade = "D"
    } else {
        grade = "F"

        fmt.Println("Try again")
    }

    fmt.Println("Your grade is a ", grade)

}
        

Output

Your grade is a  C

Στον απλό κώδικα του παραδείγματος, αναθέτουμε την τιμή 79 σε μια int μεταβλητή score. Η τιμή της μεταβλητής ελέγχεται από μια σειρά από if-else statements. Τελικά, υπάρχει μια συνθήκη (score >= 70 && score < 80) που ικανοποιείται και επιστρέφει true. Εδώ γίνονται δύο έλεγχοι και για να επιστρέψει true η if συνθήκη θα πρέπει και οι δύο πλευρές του AND ( && ) να είναι true.

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