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 mühsam und fehleranfällig. Lua bietet einen saubereren Weg: den colon (:)-Operator.
Wenn Sie eine Funktion mit einem Doppelpunkt definieren, 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 automatisch die Tabelle als erstes Argument:
player:greet() -- Ausgabe: Hello, I am HeroDas ist äquivalent zu player.greet(player), aber viel sauberer. Der Doppelpunkt kümmert sich um den self-Parameter auf beiden Seiten — während der Definition und während des Aufrufs.
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 der Standardweg, um Methoden in Lua zu definieren und aufzurufen. Sie macht deinen Code kürzer und weniger repetitiv.
Aufgabe
EinfachErstelle eine table greeter mit einem field message, das auf einen Wert initialisiert wird, den du als input erhältst.
Füge eine method :sayHello(name) using der Colon-syntax hinzu, die den greeting in diesem Format ausgibt (print):
[message], [name]!Du erhältst zwei Eingaben:
- Die Begrüßungsnachricht (
message), die ingreeter.messagegespeichert werden soll - Einen Namen, der an die Methode
:sayHello()übergeben wird
Definiere die method unter Verwendung der Colon-syntax und rufe sie mit der Colon-syntax auf. Gib den formatierten greeting aus.
Wenn zum Beispiel die message Welcome und der name Luna ist, sollte die Ausgabe (Output) 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