Die Doppelpunkt-Syntax
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 3 von 70.
Jedes Mal counter.increment(counter) zu schreiben, ist mühsam und fehleranfällig. Lua bietet einen eleganteren Weg: den Doppelpunkt-Operator (:).
Wenn du eine Funktion mit einem Doppelpunkt definierst, fügt Lua automatisch self als ersten Parameter hinzu:
local player = {
name = "Hero"
}
-- Verwendung des Doppelpunkts in der Definition
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 entspricht dem Schreiben von player.greet(player), ist aber viel sauberer. Der Doppelpunkt verarbeitet den self-Parameter auf beiden Seiten – bei der Definition und beim Aufruf.
Hier ist ein Vergleich, der zeigt, dass beide Ansätze identische Ergebnisse liefern:
local counter = { value = 0 }
-- Punkt-Syntax (explizites self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Doppelpunkt-Syntax (automatisches self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()Die Doppelpunkt-Syntax ist der Standardweg, um Methoden in Lua zu definieren und aufzurufen. Sie macht Ihren Code kürzer und weniger repetitiv.
Aufgabe
EinfachErstellen Sie eine Tabelle namens greeter mit einem Feld message, das mit einem Wert initialisiert wird, den Sie als Eingabe erhalten.
Fügen Sie eine Methode :sayHello(name) unter Verwendung der Doppelpunkt-Syntax hinzu, die die Begrüßung in diesem Format ausgibt:
[message], [name]!Sie erhalten zwei Eingaben:
- Die Begrüßungsnachricht, die in
greeter.messagegespeichert werden soll - Ein Name, der an die Methode
:sayHello()übergeben wird
Definieren Sie die Methode mit der Doppelpunkt-Syntax und rufen Sie sie mit der Doppelpunkt-Syntax auf. Geben Sie die formatierte Begrüßung aus.
Wenn die Nachricht zum Beispiel Welcome und der Name Luna ist, sollte die Ausgabe wie folgt aussehen:
Welcome, Luna!Spickzettel
Der Doppelpunkt-Operator (:) bietet eine sauberere Syntax zum Definieren und Aufrufen von Methoden in Lua, indem er den self-Parameter automatisch verarbeitet.
Wenn eine Funktion mit einem Doppelpunkt definiert wird, wird self automatisch als erster Parameter hinzugefügt:
function player:greet()
print("Hello, I am " .. self.name)
endWenn eine Funktion mit einem Doppelpunkt aufgerufen wird, wird die Tabelle automatisch als erstes Argument übergeben:
player:greet() -- Entspricht player.greet(player)Vergleich von Punkt-Syntax vs. Doppelpunkt-Syntax:
-- Punkt-Syntax (explizites self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Doppelpunkt-Syntax (automatisches self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()Die Doppelpunkt-Syntax ist der Standardweg, um Methoden in Lua zu definieren und aufzurufen, was den Code kürzer und weniger repetitiv macht.
Probier es selbst
-- Eingabe lesen
local message = io.read()
local name = io.read()
-- TODO: Schreibe deinen Code unten
-- 1. Erstelle eine Tabelle namens 'greeter' mit einem Feld 'message'
-- 2. Füge eine Methode :sayHello(name) unter Verwendung der Doppelpunkt-Syntax hinzu
-- 3. Rufe die Methode unter Verwendung der 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 Object Oriented Programming
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-Klasse2Klassen-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