Menu
Coddy logo textTech

Nil-Sicherheit im Strict Mode

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

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

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

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

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name ist hier 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 restlichen Gültigkeitsbereich als nicht null, und zur Laufzeit bricht die Assertion früh ab – an der Stelle der fehlerhaften Annahme, statt irgendwo weit entfernt.

Der Vorteil: Der Prüfer zwingt dich, jeden Wert, der „fehlen könnte“, bereits beim Bearbeiten zu behandeln, und der Laufzeitfehler tritt einfach nie auf.

challenge icon

Aufgabe

Einfach

Verarbeite Benutzerprofilfelder, die möglicherweise fehlen. Beginne deine Datei mit --!strict.

  • getDisplayName(fullName: string?): string: gibt fullName zurück, wenn es nicht nil ist, andernfalls Anonymous User.
  • formatEmail(email: string?): string: gibt die kleingeschriebene E-Mail-Adresse (string.lower) zurück, wenn sie nicht nil ist, andernfalls No email provided.
  • getUserInfo(name: string?, email: string?): string: verwendet beide Funktionen und gibt Name: [processed name], Email: [processed email] zurück.

Gib anschließend Folgendes aus, jeweils in einer eigenen Zeile:

  1. getDisplayName("John Smith")
  2. getDisplayName(nil)
  3. formatEmail("ALICE@EXAMPLE.COM")
  4. formatEmail(nil)
  5. getUserInfo("Bob Johnson", "bob@test.com")
  6. getUserInfo(nil, nil)
  7. getUserInfo("Sarah Wilson", nil)

Probier es selbst

--!strict
-- Schreibe Code hier
-- 1) getDisplayName(fullName: string?): string — nil-check, fallback "Anonymous User"
-- 2) formatEmail(email: string?): string — string.lower or "No email provided"
-- 3) getUserInfo(name: string?, email: string?): string — beide kombinieren
-- 4) drucke die sieben Testaufrufe aus der Aufgabe
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 Einführung in Luau

Übe selbstständig: Online-Lua-Compiler