Треки
/
Ruby
Ruby
/
Вправи
/
Парк розваг
Парк розваг

Парк розваг

Навчальна вправа

Вступ

Змінні екземпляра

Обʼєкти можуть зберігати власний стан, задаючи змінні екземпляра. Ці змінні живуть усередині обʼєкта і зазвичай використовуються для зберігання якогось внутрішнього стану.

Змінні екземпляра завжди починаються з @. Ми можемо створити нову змінну екземпляра, присвоївши змінну, що починається з @. Наприклад:

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

Будь-яка змінна екземпляра отримує типове значення 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. Який зріст відвідувача

Реалізуйте гетер Attendee#height класу Attendee. Він має повертати зріст екземпляра.

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

3. Який ідентифікатор перепустки на атракціон

Не всі відвідувачі купили перепустку на атракціон, але нам треба знати, чи мають вони перепустку. Реалізуйте гетер Attendee#pass_id класу Attendee. Він має повертати pass_id екземпляра або nil, якщо у відвідувача немає перепустки.

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

4. Дозвольте людям купити перепустку

Реалізуйте Attendee#issue_pass!, щоб змінити стан екземпляра й записати значення аргументу в змінну екземпляра для ідентифікатора перепустки. Він має повертати ідентифікатор перепустки.

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

5. Скасуйте перепустку

Деякі гості порушують правила небезпечною поведінкою, тож парк хоче мати змогу скасовувати перепустки. Реалізуйте Attendee#revoke_pass!, щоб змінити стан екземпляра і встановити ідентифікатор перепустки в nil.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ruby Exercism

Час розпочати Парк розваг?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.