Menu
Coddy logo textTech

Namenskonventionen

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

In Lua sind standardmäßig alle Tabellenfelder öffentlich zugänglich. Jeder kann self.health direkt lesen oder ändern. Lua erzwingt zwar keine Privatsphäre, aber Programmierer verwenden Namenskonventionen, um die Absicht zu vermitteln: Sie signalisieren, welche Felder als interne Implementierungsdetails behandelt werden sollten.

Die standardmäßige Konvention besteht darin, privaten Feldern einen Unterstrich voranzustellen:

local Player = {}
Player.__index = Player

function Player:new(name)
    local obj = {
        name = name,      -- Öffentlich: direkter Zugriff ist okay
        _health = 100,    -- Privat: stattdessen Methoden verwenden
        _score = 0        -- Privat: interne Nachverfolgung
    }
    setmetatable(obj, Player)
    return obj
end

function Player:getHealth()
    return self._health
end

function Player:takeDamage(amount)
    self._health = self._health - amount
end

Der Unterstrich verändert nicht, wie Lua funktioniert: player._health ist technisch gesehen weiterhin zugänglich. Er dient jedoch als deutlicher Hinweis für andere Programmierer (und dein zukünftiges Ich): „Dieses Feld ist als privat gedacht. Greife stattdessen über Methoden darauf zu.“

Diese Konvention ist wichtig, weil sie die Schnittstelle (was andere verwenden sollten) von der Implementierung (wie sie intern funktioniert) trennt. Wenn du später eine Validierung hinzufügen oder ändern musst, wie die Gesundheit gespeichert wird, änderst du nur die Methoden: Code, der :getHealth() verwendet, funktioniert weiterhin unverändert.

challenge icon

Aufgabe

Einfach

Erstellen wir eine BankAccount-Klasse, die mithilfe der Namenskonvention mit Unterstrich eindeutig kennzeichnet, welche Felder privat sein sollen!

Du verteilst deinen Code auf zwei Dateien:

  • BankAccount.lua: Erstelle eine Klasse, die Kontoinformationen verwaltet. Der Konstruktor :new(ownerName, initialBalance) soll den Namen des Besitzers als öffentliches Feld (owner) und den Kontostand als privates Feld (_balance) speichern. Füge drei Methoden hinzu:
    • :getBalance(): gibt den aktuellen Kontostand zurück
    • :deposit(amount): addiert den Betrag zu _balance
    • :getOwner(): gibt den Namen des Besitzers zurück
  • main.lua: Binde dein BankAccount-Modul ein und lies den Namen des Besitzers, den anfänglichen Kontostand sowie den Einzahlungsbetrag aus der Eingabe ein. Erstelle ein Konto, zahle den Betrag ein und gib anschließend den Besitzer und den endgültigen Kontostand aus.

Du erhältst drei Eingaben:

  1. Den Namen des Besitzers
  2. Den anfänglichen Kontostand (eine Zahl)
  3. Den Einzahlungsbetrag (eine Zahl)

Deine Ausgabe sollte aus zwei Zeilen bestehen, die den Besitzer und den endgültigen Kontostand nach der Einzahlung anzeigen:

Owner: {ownerName}
Balance: {finalBalance}

Wenn die Eingaben beispielsweise Maria, 500 und 150 lauten, sollte die Ausgabe folgendermaßen aussehen:

Owner: Maria
Balance: 650

Denke daran: Das Unterstrich-Präfix bei _balance signalisiert anderen Programmierern, dass auf dieses Feld über Methoden wie :getBalance() und :deposit() und nicht direkt zugegriffen werden sollte. Das Feld owner ohne Unterstrich zeigt an, dass es problemlos öffentlich verwendet werden kann.

Probier es selbst

-- BankAccount-Modul einbinden
local BankAccount = require('BankAccount')

-- Eingaben lesen
local ownerName = io.read()
local initialBalance = tonumber(io.read())
local depositAmount = tonumber(io.read())

-- TODO: Erstelle ein neues BankAccount mit ownerName und initialBalance

-- TODO: Führe eine Einzahlung mit dem depositAmount durch

-- TODO: Gib den Besitzer und den Endsaldo im erforderlichen Format aus
-- Format:
-- Owner: {ownerName}
-- Balance: {finalBalance}
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