Λούνα Παρκ

Λούνα Παρκ

Άσκηση εκμάθησης

Εισαγωγή

Μεταβλητές στιγμιοτύπου

Τα αντικείμενα μπορούν να κρατούν τη δική τους κατάσταση ορίζοντας μεταβλητές στιγμιοτύπου. Αυτές οι μεταβλητές ζουν μέσα σε ένα αντικείμενο και συνήθως χρησιμοποιούνται για να αποθηκεύουν κάποια εσωτερική κατάσταση.

Οι μεταβλητές στιγμιοτύπου ξεκινούν πάντα με ένα @. Μπορείς να δημιουργήσεις μια νέα μεταβλητή στιγμιοτύπου ορίζοντας μια μεταβλητή που ξεκινά με ένα @. Για παράδειγμα:

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

Το 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 (το άτομο που επισκέπτεται το πάρκο).

1. Δημιούργησε νέους επισκέπτες

Υλοποίησε τη μέθοδο Attendee#initialize της κλάσης Attendee. Θα πρέπει να δέχεται ένα ύψος (σε εκατοστά) και να το αποθηκεύει σε μια μεταβλητή στιγμιοτύπου

Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>

2. Πόσο ψηλός είναι ο επισκέπτης

Υλοποίησε τον getter Attendee#height της κλάσης Attendee. Θα πρέπει να επιστρέφει το ύψος του στιγμιοτύπου

Attendee.new(106).height
# => 106

3. Ποιο είναι το αναγνωριστικό της κάρτας παιχνιδιών

Δεν έχουν αγοράσει όλοι οι επισκέπτες κάρτα παιχνιδιών, αλλά πρέπει να ξέρουμε αν έχουν κάρτα ή όχι. Υλοποίησε τον getter Attendee#pass_id για την κλάση Attendee. Θα πρέπει να επιστρέφει το pass_id του στιγμιοτύπου ή nil αν ο επισκέπτης δεν έχει κάρτα.

Attendee.new(106).pass_id
# => nil

4. Επίτρεψε στους επισκέπτες να αγοράσουν κάρτα

Υλοποίησε τη μέθοδο Attendee#issue_pass! ώστε να αλλάζει την κατάσταση του στιγμιοτύπου και να θέτει τη μεταβλητή στιγμιοτύπου pass id στο όρισμα. Θα πρέπει να επιστρέφει το pass id.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42

5. Ανακάλεσε την κάρτα

Μερικοί επισκέπτες παραβιάζουν τους κανόνες με επικίνδυνη συμπεριφορά, οπότε το πάρκο θέλει να μπορεί να ανακαλεί κάρτες. Υλοποίησε τη μέθοδο Attendee#revoke_pass! ώστε να αλλάζει την κατάσταση του στιγμιοτύπου και να θέτει το pass id σε nil

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Λούνα Παρκ;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.