Menu
CoddyTech

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 aus

Deklarierst 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 gefunden

Wenn 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.

challenge icon

Aufgabe

Einfach

Verwandle eine lose Tabelle in eine Tabelle mit deklarierter Struktur.

  1. Schreibe oberhalb der Tabelle type Pet = {name: string, age: number}.
  2. Gib der Tabelle eine Typannotation: local pet: Pet = {name = "Biscuit", age = 3}.
  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

Übe selbstständig: Online-Luau-Compiler