ΕΙΣΑΓΩΓΗ
Στο προηγούμενο δωρεάν μάθημα Java είδαμε πως μπορούμε να προσθέσουμε στο κώδικα μας την δυνατότητα να ακολουθεί διαφορετική ροή εκτέλεσης ανάλογα με το αποτέλεσμα κάποιας συνθήκης.
Ο έλεγχος της συνθήκης ήταν το πρώτο βήμα σε μια σειρά από if-else ελέγχους που ακολουθούσαν.
Στο σημερινό
δωρεάν μάθημα Java θα
δούμε πως μπορούμε να ακολουθήσουμε μια παρόμοια λογική χρησιμοποιώντας το switch.
SWITCH SYNTAX AND EXPLANATION
Συντακτικά υπάρχουν
αρκετές διαφορές ανάμεσα στο switch και στα if-else statements όμως και τα δύο συμφωνούν σε μια κοινή λογική ως προς τον
τρόπο που θα αποφέρουν το επιθυμητό αποτέλεσμα.
Αν θυμάστε
από την προηγούμενη ενότητα στα if-else statements κάναμε μια σειρά από ελέγχους και η πρώτη συνθήκη που θα μας έδινε
true ήταν και εκείνη που θα όριζε την ροή
εκτέλεσης του κώδικα μας.
Αν και θα
δούμε πολύ αναλυτικά τη δομή και σύνταξη του switch, αξίζει να αναφέρουμε ότι η
μεγαλύτερη διαφορά από τα if-else είναι ότι δεν μπορούμε να χρησιμοποιήσουμε relational operators (όπως =, <=, κτλ) στις συνθήκες.
Πάμε να
δούμε πρώτα πως μοιάζει ένας java κώδικας που χρησιμοποιεί το switch και μετά θα εξηγήσουμε αναλυτικά το
πώς δουλεύει.
App.java
Output
Well done
Your grade is a B
Το πρόγραμμα
μας ξεκινάει με την ανάθεση ενός χαρακτήρα σε μια μεταβλητή με το όνομα grade. Στην αμέσως επόμενη γραμμή κώδικα,
ορίζουμε την αρχή ενός switch και μέσα στην παρένθεση περνάμε τη
μεταβλητή την οποία το switch θα ελέγξει και ανάλογα με τη τιμή της θα εκτελέσει
διαφορετικό κώδικα. Από την έκδοση java 7 και μετά το είδος της τιμής που
δέχεται το switch μπορεί
να είναι byte, short, int, char, enumeration ή String. Στο δικό μας παράδειγμα είναι char.
Η τιμή της μεταβλητής
συγκρίνεται με κάθε ένα από τα cases που έχουμε ορίσει. Εάν η τιμή του case είναι ίδια με αυτή της μεταβλητής,
τότε ο κώδικας που ακολουθεί μετά το colon ( : ) θα εκτελεστεί. Εάν κανένα από τα cases δεν επαληθευτούν, τότε θα
ενεργοποιηθεί το default. Αν και η επιλογή default είναι προαιρετική, είναι best practice να το χρησιμοποιούμε έτσι ώστε πάντα
το πρόγραμμα μας να επιλέγει κάποιο γκρουπ κώδικα να εκτελέσει ακόμα και αν
κανένα από τα cases δεν
επαληθεύεται.
Επίσης θα
παρατηρήσατε ότι σε κάθε case, μετά το τέλος του κώδικα, υπάρχει και μια εντολή break. Η χρήση του break σταματάει την εκτέλεση του κώδικα σε
εκείνο το σημείο και δεν προχωράει στο κώδικα που ανήκει στο επόμενο case. Αν δεν υπάρχει το break, τότε όλες οι γραμμές κώδικα από όλα
τα επόμενα cases θα
εκτελεστούν μέχρι να βρεθεί κάποιο break. Αν δεν υπάρχει κανένα break τότε όλος ο κώδικας θα εκτελεστεί
συμπεριλαμβανομένου και του default. Ο λόγος που συμβαίνει αυτό είναι γιατί ο έλεγχος της
μεταβλητής με το case γίνεται μόνο μια φορά. Για το πρώτο case που η σύγκριση θα επαληθευτεί, η java εκτελεί το κώδικα του συγκεκριμένου case και κάθε case που ακολουθεί μέχρι να βρει την
εντολή break.
Αυτή την
ιδιότητα του break μπορούμε
να τη χρησιμοποιήσουμε προς όφελος μας. Για παράδειγμα, στο case B δεν υπάρχει break. Ο λόγος είναι απλός: Θέλουμε αν η
μεταβλητή έχει τιμή B ή C να εκτελεστεί ο ίδιος κώδικας ο
οποίος είναι “Well done”.
Ας δούμε ένα
ακόμα πρόγραμμα στο οποίο χρησιμοποιούμε int τιμές στο switch. Παρατηρήστε ότι όταν συγκρίνουμε
αριθμούς δεν χρησιμοποιούμε quotes.
App.java
Output
Going to the third floor
You are in floor 3
Τα δύο
προηγούμενα προγράμματα ακολουθούν τον κλασικό τρόπο χρήσης του switch που στηρίζεται στο break για να εκτελεστεί ο κώδικας της εκάστοτε
επιλογής και να συνεχιστεί η εκτέλεση του προγράμματος εκτός switch. Από τη Java 13 και μετά, το switch μπορεί να χρησιμοποιηθεί σαν statement που επιστρέφει τιμή σε μια μεταβλητή
χρησιμοποιώντας την εντολή yield.
Ας δούμε πως
θα μπορούσαμε να γράψουμε πάλι το πρώτο μας πρόγραμμα κάνοντας χρήση των
καινοτομιών που προσφέρουν οι μοντέρνες εκδόσεις της Java.
App.java
Output
Your grade is a B
Well done
Υπάρχει
ακόμα ένας πιο βελτιωμένος τρόπος που λιγοστεύει ακόμα περισσότερο τον κώδικα
και αυτός είναι χρησιμοποιώντας expressions.
App.java
Output
Well done
Your grade is a B
Μην ξεχάσετε να κάνετε ένα μικρό donation έτσι ώστε αυτό το blog να μεγαλώσει ακόμα πιο πολύ και να έχει περισσότερες δυνατότητες στην online παράδοση δωρεάν μαθημάτων.
0 Comments
Η γνώμη σας είναι σημαντική.