Πλεονεκτήματα των setters και getters στην ΑΟΠ στο JavaScript
Στο προηγούμενο μάθημα δημιουργήσαμε για κάθε ιδιότητα ένα getter και ένα setter. Μπορεί να προκύψει το ερώτημα, γιατί χρειάζονται τέτοιες πολυπλοκότητες, αφού ουσιαστικά το ίδιο αποτέλεσμα μπορεί να επιτευχθεί εάν κάνουμε τις ιδιότητες δημόσιες, και όχι ιδιωτικές.
Το θέμα είναι ότι οι getters και setters έχουν πλεονέκτημα: πριν από την πρόσβαση σε μια ιδιότητα μπορούν να εκτελεστούν ορισμένοι έλεγχοι. Για παράδειγμα, στην περίπτωσή μας, κατά την εγγραφή του ονόματος και του επωνύμου μπορούμε να ελέγξουμε ότι η νέα τιμή δεν είναι κενή συμβολοσειρά:
class User {
#name;
#surn;
setName(name) {
if (name.length > 0) {
this.#name = name;
} else {
throw new Error('name is incorrect');
}
}
setSurn(surn) {
if (surn.length > 0) {
this.#surn = surn;
} else {
throw new Error('surn is incorrect');
}
}
getName() {
return this.#name;
}
getSurn() {
return this.#surn;
}
}
Ας ελέγξουμε πώς λειτουργεί αυτό. Πρώτα, ας δημιουργήσουμε ένα αντικείμενο της κλάσης:
let user = new User;
Τώρα ας προσπαθήσουμε να γράψουμε μια σωστή τιμή:
user.setName('john');
Και τώρα ας προσπαθήσουμε να γράψουμε μια μη σωστή:
user.setName(''); // σφάλμα
Στην κλάση Employee στον setter
της ηλικίας κάντε έναν έλεγχο ότι
η ηλικία πρέπει να είναι
από 0 έως 120.
Στην κλάση Employee στον getter
του μισθού κάντε έτσι ώστε
κατά την ανάγνωση του μισθού στο τέλος της
τιμής του να προστίθεται το σύμβολο του δολαρίου.