Setter-Methoden
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 14 von 70.
Getter-Methoden ermöglichen es Ihnen, interne Daten über einen kontrollierten Zugriffspunkt zu lesen. Setter-Methoden (auch Mutator-Methoden genannt) bewirken das Gegenteil – sie bieten eine kontrollierte Möglichkeit, den internen Zustand zu ändern.
Anstatt direkt car.speed = 50 zuzuweisen, rufen Sie car:setSpeed(50) auf:
local Car = {}
Car.__index = Car
function Car:new()
local instance = {}
setmetatable(instance, self)
instance.speed = 0
return instance
end
function Car:setSpeed(newSpeed)
self.speed = newSpeed
end
function Car:getSpeed()
return self.speed
endAuf den ersten Blick scheint dies ein Mehraufwand für das gleiche Ergebnis zu sein. Aber Setter werden mächtig, wenn man später Regeln hinzufügen muss. Stellen Sie sich vor, Sie möchten sicherstellen, dass die Geschwindigkeit niemals negativ wird oder ein Maximum überschreitet:
function Car:setSpeed(newSpeed)
if newSpeed < 0 then
self.speed = 0
elseif newSpeed > 200 then
self.speed = 200
else
self.speed = newSpeed
end
endJetzt durchläuft jede Geschwindigkeitsänderung Ihre Validierungslogik. Jeder Code, der :setSpeed() verwendet, profitiert automatisch von diesen Prüfungen, ohne dass Änderungen erforderlich sind. Dies ist der wahre Wert von Settern – sie schaffen einen einzigen Punkt, an dem Sie steuern, wie sich Daten ändern, wodurch Ihre Objekte sicherer und einfacher zu warten sind.
Aufgabe
EinfachLassen Sie uns eine Thermostat-Klasse erstellen, die Setter-Methoden verwendet, um die Temperatur auf intelligente Weise zu steuern. Anstatt jeden beliebigen Temperaturwert zuzulassen, wird Ihr Thermostat vernünftige Grenzwerte erzwingen – und die Temperatur in einem angenehmen Bereich halten.
Sie werden Ihren Code auf zwei Dateien aufteilen:
Thermostat.lua: Definieren Sie IhreThermostat-Klasse mit dem Standard-Prototyp-Muster. Jedes Thermostat sollte seine aktuelletemperatureverfolgen. Enthalten sein müssen:- Ein
:new()-Konstruktor, der die Temperatur auf20initialisiert (ein angenehmer Standardwert) - Ein
:getTemperature()-Getter, der die aktuelle Temperatur zurückgibt - Ein
:setTemperature(newTemp)-Setter, der die Temperatur aktualisiert, sie aber innerhalb der Grenzen hält: Minimum10und Maximum30
- Ein
main.lua: Binden Sie Ihr Thermostat-Modul ein und erstellen Sie eine Thermostat-Instanz. Verwenden Sie den Setter, um verschiedene Temperaturänderungen auszuprobieren und zu beobachten, wie die Grenzwerte erzwungen werden.
Ihre :setTemperature()-Methode sollte diese Regeln erzwingen:
- Wenn die neue Temperatur unter
10liegt, setzen Sie sie auf10 - Wenn die neue Temperatur über
30liegt, setzen Sie sie auf30 - Andernfalls setzen Sie sie auf den angeforderten Wert
Sie erhalten zwei Eingaben:
- Erste einzustellende Temperatur
- Zweite einzustellende Temperatur
Erstellen Sie in Ihrer Hauptdatei ein Thermostat und führen Sie dann Folgendes aus:
- Geben Sie die Anfangstemperatur aus
- Setzen Sie die Temperatur auf den ersten Eingabewert und geben Sie das Ergebnis aus
- Setzen Sie die Temperatur auf den zweiten Eingabewert und geben Sie das Ergebnis aus
Geben Sie jede Temperatur in einer eigenen Zeile aus (nur die Zahl).
Wenn die Eingaben beispielsweise 25 und 50 sind, sollte die Ausgabe wie folgt aussehen:
20
25
30Beachten Sie, wie der zweite Versuch, 50 einzustellen, zu 30 führt – der Setter erzwingt das Maximum automatisch!
Spickzettel
Setter-Methoden bieten eine kontrollierte Möglichkeit, den internen Zustand zu ändern, sodass Sie Validierungsregeln und Einschränkungen hinzufügen können.
Grundlegende Syntax einer Setter-Methode:
function Car:setSpeed(newSpeed)
self.speed = newSpeed
endSetter mit Validierung erzwingen Regeln, wenn sich Daten ändern:
function Car:setSpeed(newSpeed)
if newSpeed < 0 then
self.speed = 0
elseif newSpeed > 200 then
self.speed = 200
else
self.speed = newSpeed
end
endDie Kombination von Gettern und Settern schafft einen kontrollierten Zugriff auf Objekteigenschaften:
local Car = {}
Car.__index = Car
function Car:new()
local instance = {}
setmetatable(instance, self)
instance.speed = 0
return instance
end
function Car:setSpeed(newSpeed)
if newSpeed < 0 then
self.speed = 0
elseif newSpeed > 200 then
self.speed = 200
else
self.speed = newSpeed
end
end
function Car:getSpeed()
return self.speed
endSetter schaffen einen zentralen Kontrollpunkt für Datenänderungen, wodurch Objekte sicherer und einfacher zu warten sind. Jeder Code, der den Setter verwendet, profitiert automatisch und ohne Anpassung von der Validierungslogik.
Probier es selbst
-- Thermostat-Modul einbinden
local Thermostat = require('Thermostat')
-- Eingabe lesen
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())
-- TODO: Erstelle eine Thermostat-Instanz
-- TODO: Gib die Anfangstemperatur aus
-- TODO: Setze die Temperatur auf temp1 und gib das Ergebnis aus
-- TODO: Setze die Temperatur auf temp2 und gib das Ergebnis aus
Diese 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