Das Problem, das Generics lösen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 61 von 80.
Stell dir vor, du brauchst eine Funktion, die einfach jeden Wert zurückgibt, den du ihr übergibst: eine Identitätsfunktion. Mit den Typen, die du bisher kennst, hast du zwei Möglichkeiten, und beide sind problematisch.
Möglichkeit eins: Schreibe für jeden Typ eine separate Kopie. Die Funktionskörper sind identisch; nur die Typannotationen unterscheiden sich:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endJeder neue Typ bedeutet eine weitere Kopie, und ein Fehler, der in einer Kopie behoben wird, muss in allen behoben werden. Genau solche Duplikate willst du durch Funktionen vermeiden.
Möglichkeit zwei: Fasse sie zu einer Funktion zusammen, die mit any typisiert ist:
local function echo(value: any): any
return value
endJetzt erledigt eine Funktion alles, aber dafür hast du Typsicherheit eingebüßt. Wenn du echo("hello") aufrufst, weiß der Prüfer nicht mehr, dass das Ergebnis ein String ist. Er kennt nur any, sodass die automatische Vervollständigung ausbleibt und Typfehler unbemerkt bleiben: Die Verbindung zwischen dem, was hineingeht, und dem, was herauskommt, ist verloren.
Was du wirklich möchtest, ist eine Funktion, die mit jedem Typ funktioniert und sich merkt, welcher Typ bei jedem Aufruf verwendet wurde. Genau das ermöglichen Generics, und sie sind das Thema dieses Kapitels.
Aufgabe
EinfachSieh dir an, was die any-Version von echo vergisst.
- Schreibe
local function echo(value: any): any, dievaluezurückgibt. - Speichere
echo("hello")inlocal result. - Gib
resultund danachtypeof(result)aus.
Klicke auf Run Code: Die Ausgabe zeigt hello und string.
Probier es selbst
-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) print result und typeof(result)
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-Shapes9Generics: Ein erster Einblick
Das Problem, das Generics lösenEine generische IdentitätsfunktionVerwendung einer generischen FunktionGenerische ArraysGenerische Typ-AliaseZusammenfassung: Generische FunktionenÜbe selbstständig: Online-Luau-Compiler