Instanzvariablen
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 3 von 57.
Eine Instanzvariable beginnt mit @ und gehört zu einem Objekt. Ein in initialize gespeicherter Wert bleibt für jede Methode dieses Objekts verfügbar, und jede Instanz besitzt ihre eigene Kopie:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
rex = Dog.new("Rex")
bella = Dog.new("Bella")
puts rex.speak
puts bella.speakAusgabe:
Rex says Woof
Bella says WoofMethoden können Instanzvariablen ändern, sodass sich ein Objekt daran erinnert, was mit ihm geschehen ist. Zusammen bilden seine Instanzvariablen den Zustand des Objekts:
class Counter
def initialize
@count = 0
end
def increment
@count += 1
end
def report
"count is #{@count}"
end
end
clicks = Counter.new
clicks.increment
clicks.increment
puts clicks.reportAusgabe:
count is 2Auf Instanzvariablen kann nicht von außerhalb des Objekts zugegriffen werden. Code außerhalb kann nur Methoden aufrufen. Daher definiert eine Klasse, die einen Wert teilen möchte, eine Methode, die ihn zurückgibt, einen Reader:
class Dog
def initialize(name)
@name = name
end
def name
@name
end
end
rex = Dog.new("Rex")
puts rex.name
begin
rex.age
rescue NoMethodError => e
puts e.message
endAusgabe:
Rex
undefined method `age' for an instance of DogEine Instanzvariable, der nie ein Wert zugewiesen wurde, ist nil und löst keinen Fehler aus. Daher liest ein falsch geschriebener Name unbemerkt eine andere, leere Variable. instance_variables listet die Variablen auf, die ein Objekt tatsächlich besitzt:
class Lamp
def initialize
@on = false
end
def status
@onn.inspect
end
end
lamp = Lamp.new
puts lamp.status
p lamp.instance_variablesAusgabe:
nil
[:@on]Aufgabe
EinfachVervollständige die Klasse Pet. initialize(name, species, age) speichert die drei Werte, birthday addiert ein Jahr zum Alter, und describe gibt einen Satz zurück: Ein Haustier namens Rex mit der Tierart dog und dem Alter 3 ergibt Rex is a 3 year old dog.
Der bereitgestellte Code erstellt aus den ersten drei Eingabezeilen (Name, Tierart, Alter) ein Pet, ruft birthday so oft auf, wie es die vierte Zeile angibt, und gibt describe aus.
Dein Code gehört in pet.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
require_relative 'pet'
# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
input = []
while (line = gets)
input << line.chomp
end
pet = Pet.new(input[0], input[1], input[2].to_i)
input[3].to_i.times { pet.birthday }
puts pet.describe
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler