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 optionalDas 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")
endOptional bedeutet „kann fehlen“. Es bedeutet nicht „beliebiger Typ“. Wenn email vorhanden ist, muss es weiterhin eine Zeichenkette sein.
Aufgabe
EinfachGib Kontakte aus, bei denen die E-Mail-Adresse fehlen kann.
- Schreibe
type User = {name: string, email: string?}, dannlocal mia: User = {name = "Mia", email = "mia@coddy.tech"}undlocal leo: User = {name = "Leo"}. - Schreibe
local function printContact(user: User), das`{user.name}: {user.email}`ausgibt oder ohne E-Mail-Adresse`{user.name}: no email`. - Rufe sie für
miaund dann fürleoauf.
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Mit Funktionen arbeiten
Parameter und Rückgabewerte typisierenAnonyme Funktionen typisierenFunktionen ohne RückgabewertOptionale ParameterStandardwerte für ParameterStandardwerte für boolesche WerteFunktionen mit variabler ParameteranzahlFunktionstypen definierenRückblick: typisierte Funktionen7Projekt: Typisierter Aufgabenmanager
Projekt: Die AufgabenstrukturFunktion zum Hinzufügen einer Aufgabe2Grundlegende Typen
Zahl, String und BooleanDer Typ „any“: NotausgangDer Typ „unknown“Nil- und optionale TypenTypinferenz in der PraxisExplizite TypannotationenRückblick: Übung zu grundlegenden Typen5Typ-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 ArraysElemente hinzufügen und auslesenWas ist ein Map-Typ?Maps deklarieren und auf Elemente zugreifenTabellen durchlaufenTabellen mit gemischten FormenEin Raster auslesenEin Raster erstellentable.unpackRückblick: 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-Luau-Compiler