Kurzusok
/
Ruby
Ruby
/
Feladatok
/
Vidámpark
Vidámpark

Vidámpark

Tanulófeladat

Bevezetés

Példányváltozók

Az objektumok saját állapotot tárolhatnak példányváltozók beállításával. Ezek a változók egy objektumon belül élnek, és általában valamilyen belső állapot tárolására szolgálnak.

A példányváltozók mindig egy @ jellel kezdődnek. Új példányváltozót úgy hozhatsz létre, hogy beállítasz egy @ jellel kezdődő változót. Például:

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!"

Az objektumok általában az initialize metódusban állítják be a kezdeti állapotukat, amely automatikusan meghívódik, amikor egy osztályon meghívjuk a new metódust.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

Az initialize metódus argumentumokat is fogadhat, hogy minden példány egyedi állapottal indulhasson:

class Suitcase
  def initialize(locked)
    @locked = locked
  end
end

Jó gyakorlat, ha a példányváltozókat privátnak tekintjük a külső olvasástól és írástól. Helyettük metódusokat definiálunk az értékük lekérdezésére és beállítására. Például:

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

A Nil egy angol szó, amelynek jelentése „semmi” vagy „nulla”. Rubyban a nil egy objektum hiányát fejezi ki. Más programozási nyelvekben a null vagy none értékek hasonló szerepet tölthetnek be.

# I do not have a favorite color
favorite_color = nil

A Ruby minden példányváltozónak a nil alapértéket adja, amikor először találkozik vele, amíg más értéket nem adunk neki.

print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"

Utasítások

Egy vidámparkkal dolgozol, és kaptál egy specifikációt egy olyan rendszer megtervezéséhez, amely a látogatók nyilvántartását és a játékokat kezeli. Az a feladatod, hogy modellezd az Attendee osztályt (a parkba látogató személyt).

1. Hozz létre új látogatókat

Valósítsd meg az Attendee osztály Attendee#initialize metódusát; vegyen át egy magasságot (centiméterben), és tárolja el egy példányváltozóban.

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

2. Milyen magas a látogató

Valósítsd meg az Attendee osztály Attendee#height getterét; adja vissza a példány magasságát.

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

3. Mi a bérletazonosító

Nem minden látogató vásárolt bérletet, de tudnunk kell, hogy van-e bérlete vagy nincs. Valósítsd meg az Attendee osztály Attendee#pass_id getterét; adja vissza a példány pass_id értékét, vagy nil-t, ha a látogatónak nincs.

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

4. Tedd lehetővé, hogy az emberek bérletet vásároljanak

Valósítsd meg az Attendee#issue_pass! metódust, hogy módosítsa a példány állapotát, és állítsa a bérletazonosító példányváltozót az argumentumra. Adja vissza a bérletazonosítót.

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

5. Vond vissza a bérletet

Néhány vendég veszélyes viselkedéssel megszegi a szabályokat, ezért a park szeretné visszavonni a bérleteket. Valósítsd meg az Attendee#revoke_pass! metódust, hogy módosítsa a példány állapotát, és állítsa a bérletazonosítót nil-re.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Ruby Exercism

Készen állsz elkezdeni a(z) Vidámpark feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.