Menu
Coddy logo textTech

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
end

Warum 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: Luna

Dieses 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.

challenge icon

Aufgabe

Einfach

Lass 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 deine Player-Klasse mit dem standardmäßigen Prototyp-Muster. Der Konstruktor sollte einen Namen akzeptieren und die Gesundheit auf 100 setzen. 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] HP

Du 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:

  1. Den Namen des Spielers (mit :getName())
  2. Die Gesundheit des Spielers (mit :getHealth())
  3. 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 HP

Probier 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Lua-Compiler