Shapes vs. lose Tabellen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 42 von 80.
Du hast jetzt zwei Möglichkeiten, mit Record-Tabellen zu arbeiten: die lockere Variante, die du in Lua schon immer verwendet hast, und deklarierte Formen. Es lohnt sich, kurz innezuhalten und zu betrachten, was dir die jeweilige Variante bietet.
Eine lockere Tabelle akzeptiert alles. Diese Flexibilität hat ihren Preis: Schreibst du ein Feld falsch (user.nmae), erhältst du stillschweigend nil; vergisst du ein Feld, tritt der Fehler erst viel später zur Laufzeit auf, in dem Code, der als Erstes auf die Lücke zugreift:
local user = {name = "Ana", age = 20}
print(user.nmae) -- nicht streng typisierte Tabelle: gibt ohne Fehlermeldung nil ausDeklarierst du eine Form, treten solche Fehler nicht erst zur Laufzeit, sondern bereits beim Bearbeiten auf. Der Checker erkennt den Tippfehler sofort, sobald du ihn schreibst, dein Editor kann Feldnamen automatisch vervollständigen, und die type-Deklaration dient zugleich als Dokumentation des Tabelleninhalts:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ Typfehler: Schlüssel 'nmae' nicht in User gefundenWenn du von TypeScript kommst, beachte, dass Luau kein Schlüsselwort interface hat: type deckt jede Form ab. Es gibt auch keine „Deklarationszusammenführung“: Zwei Typen mit demselben Namen im selben Gültigkeitsbereich zu deklarieren, ist ein Fehler. Daher hat jede Form genau eine Definition.
Lauas Formen sind strukturell: Jede Tabelle mit den passenden Feldern und Typen entspricht der Form, unabhängig davon, wo oder wie sie erstellt wurde. Auch lockere Tabellen haben weiterhin ihren Platz: Schnelle Skripte und wirklich dynamische Daten benötigen keine deklarierte Form. Bei allem, was zwischen Funktionen übergeben wird, hilft eine Form jedoch dabei, Fehler zu erkennen, solange ihre Behebung noch wenig Aufwand verursacht.
Aufgabe
EinfachVerwandle eine lose Tabelle in eine Tabelle mit deklarierter Struktur.
- Schreibe oberhalb der Tabelle
type Pet = {name: string, age: number}. - Gib der Tabelle eine Typannotation:
local pet: Pet = {name = "Biscuit", age = 3}. - Füge unter dem ersten print
print(pet.age)hinzu.
Klicke auf Run Code: Die Ausgabe zeigt Biscuit und 3.
Probier es selbst
-- Eine Tabelle ohne feste Struktur: Ihre Felder werden nicht überprüft
local pet = {name = "Biscuit", age = 3}
print(pet.name)
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