Τα αντικείμενα μπορούν να κρατούν τη δική τους κατάσταση ορίζοντας μεταβλητές στιγμιοτύπου. Αυτές οι μεταβλητές ζουν μέσα σε ένα αντικείμενο και συνήθως χρησιμοποιούνται για να αποθηκεύουν κάποια εσωτερική κατάσταση.
Οι μεταβλητές στιγμιοτύπου ξεκινούν πάντα με ένα @.
Μπορείς να δημιουργήσεις μια νέα μεταβλητή στιγμιοτύπου ορίζοντας μια μεταβλητή που ξεκινά με ένα @.
Για παράδειγμα:
class Repeater
def hear(something)
# Save what's been heard into a new instance variable called @heard
@heard = something
end
def repeat
# Return the value of the instance variable
@heard
end
end
repeater = Repeater.new
repeater.hear("Hello, friend!")
print repeater.repeat # Prints "Hello, friend!"
Τα αντικείμενα συνήθως ορίζουν την αρχική τους κατάσταση σε μια μέθοδο initialize, η οποία καλείται αυτόματα όταν καλείς τη new σε μια κλάση.
class Airplane
def initialize
@wings = 2
end
def wings
@wings
end
end
plane = Airplane.new
plane.wings # returns 2
Η μέθοδος initialize μπορεί επίσης να δέχεται ορίσματα, ώστε κάθε στιγμιότυπο να ξεκινά με προσαρμοσμένη κατάσταση:
class Suitcase
def initialize(locked)
@locked = locked
end
end
Είναι καλή πρακτική να θεωρείς τις μεταβλητές στιγμιοτύπου ιδιωτικές, ώστε να μην διαβάζονται και να μην τροποποιούνται από έξω. Αντ' αυτού, ορίζουμε μεθόδους για να παίρνουμε και να θέτουμε τις τιμές τους. Για παράδειγμα:
class Suitcase
def initialize
@locked = false
end
def locked? # Query methods should be named with a trailing `?`
@locked
end
def lock! # Methods which mutate state should have trailing `!`
@locked = true
end
end
suitcase = Suitcase.new
suitcase.locked? # false
suitcase.lock!
suitcase.locked? # true
Το Nil είναι μια αγγλική λέξη που σημαίνει "τίποτα" ή "μηδέν".
Στη Ruby, το nil χρησιμοποιείται για να εκφράσει την απουσία ενός αντικειμένου.
Σε άλλες γλώσσες προγραμματισμού, τιμές όπως null ή none μπορεί να παίζουν παρόμοιο ρόλο.
# I do not have a favorite color
favorite_color = nil
Η Ruby δίνει σε κάθε μεταβλητή στιγμιοτύπου την προεπιλεγμένη τιμή nil όταν τη συναντήσει για πρώτη φορά, μέχρι να της δοθεί κάποια άλλη τιμή.
print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"
Δουλεύεις σε ένα λούνα παρκ και σου έχει δοθεί μια προδιαγραφή για να σχεδιάσεις ένα σύστημα που θα διαχειρίζεται την προσέλευση και τα παιχνίδια. Σου έχει ανατεθεί να μοντελοποιήσεις τον Attendee (το άτομο που επισκέπτεται το πάρκο).
Υλοποίησε τη μέθοδο Attendee#initialize της κλάσης Attendee. Θα πρέπει να δέχεται ένα ύψος (σε εκατοστά) και να το αποθηκεύει σε μια μεταβλητή στιγμιοτύπου
Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>
Υλοποίησε τον getter Attendee#height της κλάσης Attendee. Θα πρέπει να επιστρέφει το ύψος του στιγμιοτύπου
Attendee.new(106).height
# => 106
Δεν έχουν αγοράσει όλοι οι επισκέπτες κάρτα παιχνιδιών, αλλά πρέπει να ξέρουμε αν έχουν κάρτα ή όχι. Υλοποίησε τον getter Attendee#pass_id για την κλάση Attendee. Θα πρέπει να επιστρέφει το pass_id του στιγμιοτύπου ή nil αν ο επισκέπτης δεν έχει κάρτα.
Attendee.new(106).pass_id
# => nil
Υλοποίησε τη μέθοδο Attendee#issue_pass! ώστε να αλλάζει την κατάσταση του στιγμιοτύπου και να θέτει τη μεταβλητή στιγμιοτύπου pass id στο όρισμα. Θα πρέπει να επιστρέφει το pass id.
attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42
Μερικοί επισκέπτες παραβιάζουν τους κανόνες με επικίνδυνη συμπεριφορά, οπότε το πάρκο θέλει να μπορεί να ανακαλεί κάρτες. Υλοποίησε τη μέθοδο Attendee#revoke_pass! ώστε να αλλάζει την κατάσταση του στιγμιοτύπου και να θέτει το pass id σε nil
attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.