Menu
CoddyTech

Optionale Eigenschaften

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

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.

In Luau kannst du das für einen Typ explizit angeben: Füge nach dem Typ eines Felds ? ein, 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 die Kurzform für string | nil. Dieselbe Idee gilt nun für einzelne Felder eines Typs.

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

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

Optional bedeutet „kann fehlen“. Es bedeutet nicht „beliebiger Typ“. Wenn email vorhanden ist, muss es weiterhin eine Zeichenkette sein.

challenge icon

Aufgabe

Einfach

Gib Kontakte aus, bei denen die E-Mail-Adresse fehlen kann.

  1. Schreibe type User = {name: string, email: string?}, dann local mia: User = {name = "Mia", email = "mia@coddy.tech"} und local leo: User = {name = "Leo"}.
  2. Schreibe local function printContact(user: User), das `{user.name}: {user.email}` ausgibt oder ohne E-Mail-Adresse `{user.name}: no email`.
  3. Rufe sie für mia und dann für leo auf.

Klicke auf Run Code: Die Ausgabe zeigt Mia: mia@coddy.tech und Leo: no email.

Probier es selbst

-- 1) Typ User mit einer optionalen email, dann mia und leo
-- 2) printContact(user: User) mit einer Prüfung der email
-- 3) für mia aufrufen, dann für leo

Alle Lektionen in Einführung in Luau

Übe selbstständig: Online-Luau-Compiler