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-ModusDiese 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"
endWenn 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.
Aufgabe
EinfachVerarbeite Benutzerprofilfelder, die möglicherweise fehlen. Beginne deine Datei mit --!strict.
getDisplayName(fullName: string?): string: gibtfullNamezurück, wenn es nichtnilist, andernfallsAnonymous User.formatEmail(email: string?): string: gibt die kleingeschriebene E-Mail-Adresse (string.lower) zurück, wenn sie nichtnilist, andernfallsNo email provided.getUserInfo(name: string?, email: string?): string: verwendet beide Funktionen und gibtName: [processed name], Email: [processed email]zurück.
Gib anschließend Folgendes aus, jeweils in einer eigenen Zeile:
getDisplayName("John Smith")getDisplayName(nil)formatEmail("ALICE@EXAMPLE.COM")formatEmail(nil)getUserInfo("Bob Johnson", "bob@test.com")getUserInfo(nil, nil)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
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen8Enums auf die Luau-Art
Das Enum-Pattern in LuauNumerische Enums mit TablesString-Enums als UnionsVerwendung von Literal Union EnumsKonstante Tables einfrierenZusammenfassung: Enums auf die Luau-Art11Fortgeschrittene Themen
Typzusicherungen (Type Assertions)Type Guards mit typeofDer Typ neverNil-Sicherheit im Strict ModeIndex-SignaturenZusammenfassung: Feineinstellung von Typen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und MapsÜbe selbstständig: Online-Lua-Compiler