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. Das ist flexibel, aber auch der Grund, warum sich Fehler wie attempt to concatenate a nil value einschleichen.

Luau ermöglicht es, dies ausdrücklich in einer Struktur anzugeben: Füge nach dem Typ eines Feldes ein ? hinzu, um es als optional zu kennzeichnen:

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

Das kennst du bereits von Variablen: string? ist eine Kurzform für string | nil. Dieselbe Idee gilt nun auch für einzelne Felder einer Struktur.

Da ein optionales Feld nil sein könnte, musst du es vor der Verwendung überprüfen. Das klassische Lua-Muster funktioniert, und im Strict-Modus grenzt der Prüfer den Typ innerhalb des Zweigs ein:

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

Optional bedeutet „darf fehlen“. Es bedeutet nicht „beliebiger Typ“. Wenn email vorhanden ist, muss es weiterhin eine Zeichenkette 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-Adresse hat, gibt sie [name] - [email] aus; andernfalls gibt sie [name] - no email aus.

Dann:

  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 den 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 Benutzer 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

Übe selbstständig: Online-Lua-Compiler