Getter-Methoden
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 13 von 70.
Du hast gelernt, Daten in Instanzvariablen wie self.health oder self.items zu speichern. Obwohl du von außerhalb des Objekts direkt auf diese Felder zugreifen kannst, gibt es einen saubereren Ansatz: die Verwendung von Getter-Methoden.
Ein Getter (auch Zugriffsmethode genannt) ist eine einfache Methode, die einen internen Wert zurückgibt. Anstatt direkt auf player.health zuzugreifen, rufst du player:getHealth() auf:
local Player = {}
Player.__index = Player
function Player:new(name)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.health = 100
return instance
end
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endWarum sich mit einer zusätzlichen Methode abmühen? Getter bieten einen kontrollierten Zugriffspunkt auf deine Daten.
Im Moment gibt :getHealth() einfach den Wert zurück. Aber später möchtest du vielleicht Logik hinzufügen: etwa „Critical“ zurückgeben, wenn die Gesundheit unter 10 sinkt, oder jedes Mal protokollieren, wenn die Gesundheit überprüft wird.
Mit einem Getter kannst du diese Änderungen vornehmen, ohne Code zu ändern, der das Objekt verwendet.
local hero = Player:new("Luna")
print(hero:getHealth()) -- Ausgabe: 100
print(hero:getName()) -- Ausgabe: LunaDieses Muster schafft eine klare Grenze zwischen der internen Struktur eines Objekts und der Art und Weise, wie anderer Code mit ihm interagiert. Die Außenwelt fragt Daten über Methoden ab, anstatt direkt auf die Felder des Objekts zuzugreifen.
Aufgabe
EinfachLass uns eine Player-Klasse erstellen, die Getter-Methoden verwendet, um auf ihre internen Daten zuzugreifen. Anstatt direkt auf die Felder des Spielers zuzugreifen, erstellst du Methoden, die einen kontrollierten Zugriff auf die Informationen des Spielers ermöglichen.
Du organisierst deinen Code über zwei Dateien:
Player.lua: Definiere deinePlayer-Klasse mit dem standardmäßigen Prototyp-Muster. Der Konstruktor sollte einen Namen akzeptieren und die Gesundheit auf100setzen. Füge drei Getter-Methoden hinzu::getName()gibt den Namen des Spielers zurück:getHealth()gibt die aktuelle Gesundheit des Spielers zurück:getStatus()gibt eine formatierte Zeichenkette zurück, die beide Informationen kombiniert
main.lua: Binde dein Player-Modul ein und erstelle eine Spielerinstanz. Verwende die Getter-Methoden, um die Informationen des Spielers anzuzeigen: Greife auf alles über Methoden zu, anstatt die Felder direkt auszulesen.
Deine :getStatus()-Methode sollte eine Zeichenkette in diesem exakten Format zurückgeben:
[name] has [health] HPDu erhältst eine Eingabe: den Namen des Spielers.
Erstelle in deiner Hauptdatei einen Spieler mit dem angegebenen Namen und gib anschließend mithilfe deiner Getter-Methoden drei Zeilen aus:
- Den Namen des Spielers (mit
:getName()) - Die Gesundheit des Spielers (mit
:getHealth()) - Den vollständigen Status des Spielers (mit
:getStatus())
Wenn die Eingabe beispielsweise Luna lautet, sollte die Ausgabe wie folgt aussehen:
Luna
100
Luna has 100 HPProbier es selbst
-- Lade das Player-Modul
local Player = require('Player')
-- Eingabe lesen
local name = io.read()
-- TODO: Erstelle eine Player-Instanz mit dem gegebenen Namen
-- TODO: Gib den Namen des Spielers mit :getName() aus
-- TODO: Gib die Gesundheit des Spielers mit :getHealth() aus
-- TODO: Gib den Status des Spielers mit :getStatus() aus
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler