Menu
CoddyTech

Null-Sicherheit im Strict-Modus

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 77 von 80.

Der häufigste Lua-Absturz lautet „attempt to index nil“: Code, der davon ausging, dass ein Wert vorhanden war, obwohl das nicht der Fall war. Luau setzt dem nil-Disziplin entgegen: Unter --!strict kann ein einfaches string niemals nil sein. Wenn nil tatsächlich möglich ist, muss der Typ das mit ? angeben:

--!strict
local nickname: string? = nil   -- ok: string ODER nil
local username: string = nil    -- ✗ Typfehler im strikten Modus

Die Disziplin wirkt in beide Richtungen: Bei einem string? lässt dich der strikte Modus diesen nicht als String verwenden, bevor du nil ausgeschlossen hast. Das übliche Mittel ist ein einfacher Vergleich, der den Typ genauso eingrenzt wie eine typeof-Prüfung:

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name ist hier vom Typ string
    end
    return "NOBODY"
end

Wenn nil ein Fehler und kein gültiger Fall wäre, verwende assert: Nach assert(x ~= nil) behandelt der Prüfer x für den Rest des Gültigkeitsbereichs als nicht-nil. Zur Laufzeit löst assert den Absturz früh aus, genau an der Stelle, an der die Annahme falsch ist, statt weit entfernt davon.

Der Vorteil: Der Prüfer zwingt dich, jeden Wert, der „möglicherweise fehlt“, schon während der Bearbeitung zu behandeln, und der Laufzeitfehler tritt schlicht nie auf.

challenge icon

Aufgabe

Einfach

Gib einen Namen an, für den möglicherweise ein sicherer Ersatzwert fehlt.

  1. Lass --!strict in der ersten Zeile stehen.
  2. Schreibe local function getDisplayName(fullName: string?): string, das fullName zurückgibt, wenn es nicht nil ist, andernfalls "Anonymous User".
  3. Gib getDisplayName("John Smith") und getDisplayName(nil) aus.

Klicke auf „Code ausführen“: Die Ausgabe zeigt John Smith und Anonymous User.

Probier es selbst

--!strict
-- 1) getDisplayName(fullName: string?): string, mit Rückgriff auf "Anonymous User"
-- 2) Gib es für "John Smith" und nil aus

Alle Lektionen in Einführung in Luau

Übe selbstständig: Online-Luau-Compiler