Menu
Coddy logo textTech

Setter-Methoden

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

Getter-Methoden ermöglichen es dir, interne Daten über einen kontrollierten Zugriffspunkt zu lesen. Setter-Methoden (auch Mutator-Methoden genannt) tun das Gegenteil. Sie bieten eine kontrollierte Möglichkeit, den internen Zustand zu ändern.

Anstatt car.speed = 50 direkt zuzuweisen, rufst du 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
end

Auf den ersten Blick scheint das zusätzliche Arbeit für dasselbe Ergebnis zu sein. Setter werden jedoch mächtig, wenn du später Regeln hinzufügen musst. Stell dir vor, du möchtest sicherstellen, dass die Geschwindigkeit niemals negativ wird oder einen Höchstwert überschreitet:

function Car:setSpeed(newSpeed)
    if newSpeed < 0 then
        self.speed = 0
    elseif newSpeed > 200 then
        self.speed = 200
    else
        self.speed = newSpeed
    end
end

Jetzt durchläuft jede Geschwindigkeitsänderung deine Validierungslogik. Jeder Code, der :setSpeed() verwendet, profitiert automatisch von diesen Prüfungen, ohne dass Änderungen erforderlich sind. Das ist der eigentliche Wert von Settern. Sie schaffen eine zentrale Stelle, an der du kontrollierst, wie sich Daten ändern, und machen deine Objekte dadurch sicherer und leichter zu warten.

challenge icon

Aufgabe

Einfach

Erstelle eine Thermostat-Klasse, die mithilfe von Setter-Methoden die Temperatur auf intelligente Weise steuert. Anstatt jeden beliebigen Temperaturwert zuzulassen, setzt dein Thermostat sinnvolle Grenzen und hält die Temperatur innerhalb eines angenehmen Bereichs.

Du organisierst deinen Code auf zwei Dateien:

  • Thermostat.lua: Definiere deine Thermostat-Klasse mit dem standardmäßigen Prototyp-Muster. Jedes Thermostat soll seine aktuelle temperature speichern. Füge Folgendes hinzu:
    • Einen :new()-Konstruktor, der die Temperatur auf 20 (einen angenehmen Standardwert) initialisiert
    • Einen :getTemperature()-Getter, der die aktuelle Temperatur zurückgibt
    • Einen :setTemperature(newTemp)-Setter, der die Temperatur aktualisiert, sie aber innerhalb der Grenzen hält: Minimum 10 und Maximum 30
  • main.lua: Binde dein Thermostat-Modul ein und erstelle eine Thermostat-Instanz. Verwende den Setter, um verschiedene Temperaturänderungen zu versuchen, und beobachte, wie die Grenzen durchgesetzt werden.

Deine :setTemperature()-Methode soll diese Regeln durchsetzen:

  • Wenn die neue Temperatur unter 10 liegt, setze sie auf 10
  • Wenn die neue Temperatur über 30 liegt, setze sie auf 30
  • Andernfalls setze sie auf den angeforderten Wert

Du erhältst zwei Eingaben:

  1. Erste zu setzende Temperatur
  2. Zweite zu setzende Temperatur

Erstelle in deiner Hauptdatei ein Thermostat und:

  1. Gib die Anfangstemperatur aus
  2. Setze die Temperatur auf den ersten Eingabewert und gib das Ergebnis aus
  3. Setze die Temperatur auf den zweiten Eingabewert und gib das Ergebnis aus

Gib jede Temperatur in einer eigenen Zeile aus (nur die Zahl).

Wenn die Eingaben beispielsweise 25 und 50 lauten, sollte die Ausgabe wie folgt aussehen:

20
25
30

Beachte, dass der zweite Versuch, 50 zu setzen, zu 30 führt: Der Setter setzt automatisch die maximale Grenze durch!

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
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