Menu
Coddy logo textTech

Attribute initialisieren

Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 9 von 70.

Der :new()-Konstruktor, den du kennengelernt hast, erstellt Objekte, aber jede Instanz beginnt identisch. Reale Objekte benötigen eindeutige Daten: Eine Person hat einen bestimmten Namen, ein Spieler hat eine Startpunktzahl. Damit Objekte nützlich sind, muss der Konstruktor Argumente akzeptieren und sie der neuen Instanz zuweisen.

So erweiterst du den Konstruktor, damit er Anfangswerte akzeptiert:

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

Der Konstruktor nimmt jetzt name und breed als Parameter entgegen. Nachdem wir die leere Instanz erstellt und ihre Metatabelle festgelegt haben, weisen wir diese Werte direkt den Feldern der Instanz zu. Jedes erstellte Objekt verfügt über ein eigenes name und breed.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- Ausgabe: I am Rex, a German Shepherd
dog2:introduce()  -- Ausgabe: I am Bella, a Poodle

Beide Hunde teilen sich dieselbe :introduce()-Methode aus dem Prototyp, aber jeder hat seinen eigenen eindeutigen Namen und seine eigene Rasse, die in seiner Instanztabelle gespeichert sind. Das ist die Stärke der Kombination von Prototypen mit parametrisierten Konstruktoren: gemeinsames Verhalten mit individuellem Zustand.

challenge icon

Aufgabe

Einfach

Erstellen wir eine Person-Klasse, die eindeutige Personen mit eigenen Namen und Altersangaben erstellt. Du wirst deinen Code auf zwei Dateien verteilen, um eine korrekte Modulstruktur zu üben.

Du wirst Folgendes erstellen:

  • Person.lua: Definiere deine Person-Klasse mit einem Konstruktor, der einen Namen und ein Alter akzeptiert. Füge eine :introduce()-Methode hinzu, mit der jede Person sich selbst vorstellen kann.
  • main.lua: Binde dein Person-Modul ein und erstelle mithilfe der vorgegebenen Eingaben eine Personeninstanz. Lass sie sich anschließend vorstellen.

Dein :new(name, age)-Konstruktor sollte beide Werte akzeptieren und sie in der neuen Instanz speichern. Die :introduce()-Methode sollte exakt in diesem Format ausgeben:

Hello, my name is [name] and I am [age] years old

Du erhältst zwei Eingaben:

  1. Der Name der Person
  2. Das Alter der Person

Wenn die Eingaben beispielsweise Alice und 25 lauten, sollte die Ausgabe folgendermaßen aussehen:

Hello, my name is Alice and I am 25 years old

Probier es selbst

-- Das Person-Modul einbinden
local Person = require('Person')

-- Eingabe lesen
local name = io.read()
local age = io.read()

-- TODO: Erstelle eine neue Person-Instanz mit Person:new(name, age)

-- TODO: Rufe die introduce()-Methode auf deiner Person-Instanz auf
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