Σχετικά με την έννοια Μεταβλητές στιγμιοτύπου
Βασικά σημεία:
- Όταν καλείται η μέθοδος
.new μιας κλάσης για να δημιουργηθεί ένα στιγμιότυπο αντικειμένου, στη μέθοδο .initialize περνιούνται όλα τα ορίσματα για να αρχικοποιηθεί η κατάσταση του στιγμιότυπου.
- Τα ονόματα των μεταβλητών στιγμιότυπου έχουν πρόθεμα
@.
- Οι μεταβλητές στιγμιότυπου έχουν προεπιλεγμένη τιμή
nil μέχρι να οριστούν ρητά.
- Οι μεταβλητές στιγμιότυπου είναι ιδιωτικές από προεπιλογή και θα πρέπει να τις χειρίζεσαι με getters και setters.
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Οι μέθοδοι που το όνομά τους τελειώνει σε
= αναγνωρίζονται από τη Ruby ως setters και επιτρέπουν τη χρήση της σύνταξης ανάθεσης ως συντακτικής "ζάχαρης", π.χ. Backpack.new("Sven").owner = "Ayah".
Πρόσεξε το κενό ανάμεσα στο owner και το =, ενώ το πραγματικό όνομα της μεθόδου είναι owner=.
- Μπορείς να δημιουργήσεις getters και setters χρησιμοποιώντας τις μεθόδους
attr_reader, attr_writer και attr_accessor:
-
attr_reader: Δημιουργεί getters για τα σύμβολα που παρατίθενται
-
attr_writer: Δημιουργεί setters για τα σύμβολα που παρατίθενται
-
attr_accessor: Δημιουργεί getters και setters για τα σύμβολα που παρατίθενται
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- Γιατί να χρησιμοποιείς getters και setters αντί για την ίδια τη μεταβλητή στιγμιότυπου;
- Αν υπήρχε ένα τυπογραφικό λάθος (το λέμε "typo") στο προηγούμενο παράδειγμα (π.χ.
@ownar), θα αποτύγχανε σιωπηλά και θα μπορούσε να εισαγάγει ένα bug στο σύστημα.
- Οι getters και οι setters το κάνουν αυτό ρητό και θα πετάξουν ένα σφάλμα όταν γίνει ένα typo.
Αναφορές
Αρχικοποίηση στιγμιοτύπων αντικειμένου