Das Problem, das Generics lösen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 57 von 73.
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 Annotationen 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 anderen ebenfalls behoben werden. Genau diese Duplizierung möchtest du durch das Schreiben von Funktionen vermeiden.
Möglichkeit zwei: Fasse sie zu einer einzigen Funktion zusammen, die mit any typisiert ist:
local function echo(value: any): any
return value
endJetzt verarbeitet eine Funktion alles, aber du bezahlst dafür mit Typsicherheit. Wenn du echo("hello") aufrufst, weiß der Prüfer nicht mehr, dass das Ergebnis ein String ist. Er kennt nur any, sodass die Autovervollständigung ausfällt und Typfehler unbemerkt bleiben: Die Verbindung zwischen dem, was hineinging, und dem, was herauskommt, ist verloren.
Was du wirklich möchtest, ist eine Funktion, die für jeden Typ funktioniert und sich merkt, welchen Typ jeder Aufruf verwendet hat. Genau das ermöglichen dir Generics, und sie sind das Thema dieses Kapitels.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
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-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-Lua-Compiler