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 optionalDas 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")
endOptional bedeutet „darf fehlen“. Es bedeutet nicht „beliebiger Typ“. Wenn email vorhanden ist, muss es weiterhin eine Zeichenkette sein.
Aufgabe
EinfachErstelle einen Typ-Alias namens User mit:
namevom Typstring(erforderlich)emailvom Typstring?(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:
- Rufe
printContact(alice)auf - Rufe
printContact(bob)auf - Gib das Ergebnis des Vergleichs
bob.email == nilaus
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
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-Kombinationen3Typisierte 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 Maps6Typisieren von Tabellen-Shapes
Inline-Shape-AnnotationenTyp-Aliase für ShapesOptionale EigenschaftenShapes vs. lose TabellenShapes erweiternMethoden zu Shapes hinzufügenSelf und Methoden mit DoppelpunktZusammenfassung: Definieren von Tabellen-ShapesÜbe selbstständig: Online-Lua-Compiler