Thursday, May 9, 2019

JAVA - ΕΝΟΤΗΤΑ 9 – The switch Statement

Στην προηγούμενη ενότητα είδατε πως μπορούμε να προσθέσουμε στον κώδικα μας την δυνατότητα να ακολουθεί διαφορετική ροή εκτέλεσης ανάλογα με το αποτέλεσμα κάποιας συνθήκης. Ο έλεγχος της συνθήκης ήταν το πρώτο βήμα σε μια σειρά από if-else ελέγχους που ακολουθούσαν.
Στην Java μπορούμε να ακολουθήσουμε μια παρόμοια λογική χρησιμοποιώντας το switch. Συντακτικά υπάρχουν αρκετές διαφορές αλλά η λογική όμως είναι η ίδια: κάνουμε μια σειρά από ελέγχους και η πρώτη συνθήκη που θα είναι true θα δώσει και την αντίστοιχη ροή εκτέλεσης στο πρόγραμμα μας. Αν και θα δούμε πιο αναλυτικά την δομή του switch η πιο μεγάλη του διαφορά με το if-else είναι ότι δεν μπορούμε να χρησιμοποιήσουμε relational operators (όπως =, <=, κτλ) στις συνθήκες. Πάμε να δούμε ένα απλό παράδειγμα και μετά θα εξηγήσουμε καλύτερα το πως δουλεύει.









 



Το πρόγραμμα μας ξεκινάει με την ανάθεση ενός χαρακτήρα σε μια μεταβλητή με το όνομα grade. Στην αμέσως επόμενη γραμμή κώδικα, περνάμε στο switch την μεταβλητή για την οποία το πρόγραμμα θα πάρει κάποιες αποφάσεις ανάλογα με την τιμή της. Από την έκδοση Java 7 και πάνω το είδος της τιμής που δέχεται το switch μπορεί να είναι byte, short, int, char, enumeration ή String. Στο δικό μας παράδειγμα είναι char.

Η τιμή της μεταβλητής συγκρίνεται με κάθε ένα από τα cases που έχουμε ορίσει. Εάν η τιμή του case είναι ίδια με αυτή της μεταβλητής, τότε ο κώδικας που ακολουθεί μετά το colon (:) θα εκτελεστεί. Εάν κανένα από τα cases δεν επαληθευτούν, τότε θα ενεργοποιηθεί το default. Αν και η επιλογή default είναι προαιρετική, είναι χρήσιμη έτσι ώστε πάντα το πρόγραμμα μας να επιλέγει κάποιο γκρουπ κώδικα να τρέξει, ακόμα και αν κανένα case δεν επαληθεύεται.

Επίσης θα έχετε παρατηρήσει, ότι μετά το τέλος του κώδικα σε κάθε case υπάρχει ένα break. Αυτό πολύ απλά σταματάει την εκτέλεση του κώδικα και από το επόμενο case. Αν δεν υπάρχει το case, τότε όλες οι γραμμές του κώδικα θα εκτελεστούν μέχρι να βρεθεί κάποιο break. Αν δεν βρεθεί τότε θα τρέξει όλος ο κώδικας του switch ακόμα και του default. Ο λόγος που γίνεται αυτό είναι γιατί ο έλεγχος γίνεται μόνο μια φορά στο case. Για το πρώτο case που η σύγκριση επαληθευτεί, η java εκτελεί τον κώδικα του συγκεκριμένου case και κάθε case κάτω από αυτό μέχρι να βρει ένα break.

Αυτή την ιδιότητα του break μπορούμε να την χρησιμοποιήσουμε προς όφελος μας. Για παράδειγμα, στο παράδειγμα μας, στο case B δεν υπάρχει break. Ο λόγος είναι απλός: θέλουμε αν ο χαρακτήρας είναι B ή C να τρέξει ο ίδιος κώδικας που είναι “Well done”.

Πριν κλείσουμε αυτή την ενότητα ας δούμε ένα ακόμα πρόγραμμα που αυτή τη φορά θα περάσουμε int τιμές στο switch. Παρατηρήστε ότι στο case δεν μπαίνουν τα signle quotes ( ‘ ‘) όταν συγκρίνουμε αριθμούς.

 



Μιχάλης Κασάπογλου