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 ( ‘ ‘) όταν συγκρίνουμε αριθμούς.
Μιχάλης
Κασάπογλου