Tracks
/
Ruby
Ruby
/
Übungen
/
Freizeitpark
Freizeitpark

Freizeitpark

Lernübung

Einführung

Instanzvariablen

Objekte können ihren eigenen Zustand speichern, indem sie Instanzvariablen setzen. Diese Variablen leben innerhalb eines Objekts und werden normalerweise verwendet, um einen internen Zustand zu speichern.

Instanzvariablen beginnen immer mit einem @. Du kannst eine neue Instanzvariable erstellen, indem du eine Variable setzt, die mit einem @ beginnt. Zum Beispiel:

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

Objekte legen ihren Anfangszustand normalerweise in einer initialize-Methode fest, die automatisch aufgerufen wird, wenn du new für eine Klasse aufrufst.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

Die initialize-Methode kann auch Argumente entgegennehmen, sodass jede Instanz mit einem eigenen Zustand starten kann:

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

Es ist gute Praxis, Instanzvariablen als privat gegenüber externem Lesen und Schreiben zu betrachten. Stattdessen definieren wir Methoden, um ihre Werte zu lesen und zu setzen. Zum Beispiel:

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 ist ein englisches Wort und bedeutet „nichts“ oder „null“. In Ruby wird nil verwendet, um die Abwesenheit eines Objekts auszudrücken. In anderen Programmiersprachen spielen Werte wie null oder none eine ähnliche Rolle.

# I do not have a favorite color
favorite_color = nil

Ruby gibt jeder Instanzvariable den Standardwert nil, wenn sie zum ersten Mal auftritt, bis ihr anderweitig ein Wert zugewiesen wird.

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

Anleitung

Du arbeitest mit einem Freizeitpark zusammen und hast eine Spezifikation erhalten, um ein System für die Verwaltung von Besuchern und Fahrgeschäften zu entwerfen. Deine Aufgabe ist es, den Attendee (die Person, die den Park besucht) zu modellieren.

1. Neue Besucher anlegen

Implementiere die Methode Attendee#initialize der Klasse Attendee. Sie soll eine Größe (in Zentimetern) entgegennehmen und als Instanzvariable speichern.

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

2. Wie groß ist der Besucher

Implementiere den Getter Attendee#height der Klasse Attendee. Er soll die Größe der Instanz zurückgeben.

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

3. Wie lautet die Fahrpass-ID

Nicht alle Besucher haben einen Fahrpass gekauft, aber wir müssen wissen, ob sie einen haben oder nicht. Implementiere den Getter Attendee#pass_id für die Klasse Attendee. Er soll die pass_id der Instanz zurückgeben oder nil, wenn der Attendee keinen hat.

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

4. Erlaube Besuchern, einen Fahrpass zu kaufen

Implementiere Attendee#issue_pass!, um den Zustand der Instanz zu verändern, und setze die Instanzvariable für die Pass-ID auf das Argument. Die Methode soll die Pass-ID zurückgeben.

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

5. Den Fahrpass entziehen

Manche Gäste brechen die Regeln mit unsicherem Verhalten, deshalb möchte der Park Pässe entziehen können. Implementiere Attendee#revoke_pass!, um den Zustand der Instanz zu verändern, und setze die Pass-ID auf nil.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Freizeitpark zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.