Die Doppelpunkt-Syntax
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 3 von 70.
Jedes Mal counter.increment(counter) zu schreiben, ist umständlich und fehleranfällig. Lua bietet eine sauberere Möglichkeit: den Doppelpunkt-Operator (:).
Wenn du eine Funktion mit einem Doppelpunkt definierst, fügt Lua automatisch self als ersten Parameter hinzu:
local player = {
name = "Hero"
}
-- Doppelpunkt in der Definition verwenden
function player:greet()
print("Hello, I am " .. self.name)
endDer Doppelpunkt funktioniert auch beim Aufrufen der Funktion. Er übergibt die Tabelle automatisch als erstes Argument:
player:greet() -- Ausgabe: Hello, I am HeroDies ist gleichbedeutend mit dem Schreiben von player.greet(player), aber deutlich sauberer. Der Doppelpunkt behandelt den self-Parameter an beiden Stellen: bei der definition und beim Aufruf.
Hier ist ein Vergleich, der zeigt, dass beide Ansätze identische Ergebnisse liefern:
local counter = { value = 0 }
-- Punktsyntax (explizites self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Doppelpunktsyntax (automatisches self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()Die Doppelpunkt-Syntax ist die standardmäßige Methode, um Methoden in Lua zu definieren und aufzurufen. Sie macht deinen Code kürzer und weniger repetitiv.
Aufgabe
EinfachErstelle eine Tabelle namens greeter mit einem Feld message, das mit einem Wert initialisiert wird, den du als Eingabe erhältst.
Füge eine Methode :sayHello(name) unter Verwendung der Doppelpunkt-Syntax hinzu, die die Begrüßung in diesem Format ausgibt:
[message], [name]!Du erhältst zwei Eingaben:
- Die Begrüßungsnachricht, die in
greeter.messagegespeichert werden soll - Einen Namen, der an die Methode
:sayHello()übergeben werden soll
Definiere die Methode mit der Doppelpunkt-Syntax und rufe sie ebenfalls mit der Doppelpunkt-Syntax auf. Gib die formatierte Begrüßung aus.
Wenn die Nachricht beispielsweise Welcome und der Name Luna lautet, sollte die Ausgabe wie folgt aussehen:
Welcome, Luna!Probier es selbst
-- Eingabe lesen
local message = io.read()
local name = io.read()
-- TODO: Schreibe deinen Code darunter
-- 1. Erstelle eine Tabelle namens 'greeter' mit einem Feld 'message'
-- 2. Füge eine Methode :sayHello(name) mit Doppelpunkt-Syntax hinzu
-- 3. Rufe die Methode mit Doppelpunkt-Syntax auf, um die Begrüßung auszugebenDiese 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