Menu
Coddy logo textTech

Optionale Eigenschaften

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

Nicht jedes Feld ist immer vorhanden. In Lua wird ein fehlendes Tabellenfeld einfach als nil gelesen — was flexibel ist, aber auch der Grund dafür, wie sich Fehler wie attempt to concatenate a nil value einschleichen.

Luau ermöglicht es einer Form, dies explizit auszudrücken: Fügen Sie ? nach dem Typ eines Feldes hinzu, um es als optional zu markieren:

type User = {
    name: string,   -- erforderlich
    email: string?, -- optional: string oder nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ in Ordnung, email ist optional

Sie sind dem bereits bei Variablen begegnet: string? ist die Kurzform für string | nil. Dasselbe Konzept gilt nun für einzelne Felder einer Form.

Da ein optionales Feld nil sein kann, müssen Sie es prüfen, bevor Sie es verwenden. Das klassische Lua-Muster funktioniert, und im Strict-Modus verengt der Typechecker den Typ innerhalb des Zweigs:

if bob.email then
    print(`email: {bob.email}`) -- hier ist email ein String
else
    print("no email on file")
end

Optional bedeutet "kann fehlen" — es bedeutet nicht "ein beliebiger Typ". Wenn email existiert, muss es immer noch ein String sein.

challenge icon

Aufgabe

Einfach

Erstelle einen Typ-Alias namens User mit:

  • name vom Typ string (erforderlich)
  • email vom Typ string? (optional)

Erstelle zwei Benutzer:

  • alice — Name "Alice", E-Mail "alice@luau.dev"
  • bob — Name "Bob", keine E-Mail

Erstelle eine Funktion printContact, die einen User entgegennimmt. Wenn der Benutzer eine E-Mail hat, gibt sie [name] - [email] aus; andernfalls gibt sie [name] - no email aus.

Danach:

  1. rufe printContact(alice) auf
  2. rufe printContact(bob) auf
  3. gib das Ergebnis des Vergleichs bob.email == nil aus

Probier es selbst

-- Schreibe hier Code
-- 1) definiere den Typ User mit einem optionalen email-Feld
-- 2) erstelle alice (mit email) und bob (ohne)
-- 3) schreibe printContact mit einer nil-Prüfung
-- 4) rufe es für beide User auf, dann gib bob.email == nil 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 Einführung in Luau