Le problème résolu par les génériques
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 57 sur 73.
Imaginez que vous ayez besoin d'une fonction qui renvoie simplement la valeur que vous lui passez — une fonction identité. Avec les types que vous connaissez jusqu'à présent, vous avez deux options, et toutes deux posent problème.
Option un : écrire une copie séparée pour chaque type. Les corps sont identiques ; seules les annotations diffèrent :
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endChaque nouveau type implique une autre copie, et un bug corrigé dans l'une doit être corrigé dans toutes les autres. C'est exactement le genre de duplication qu'on cherche à éviter en écrivant des fonctions.
Option deux : les regrouper en une seule fonction typée avec any :
local function echo(value: any): any
return value
endDésormais, une seule fonction gère tout — mais au détriment de la sécurité de typage. Lorsque vous appelez echo("hello"), le checker ne knows plus que le result est un string. Il sait seulement any, l'autoplétion s'éteint et les erreurs de type s'infiltrent : la relation entre ce qui est entré et ce qui sort est perdue.
Ce que vous voulez vraiment, c'est une fonction qui fonctionne pour chaque type et qui se souvient du type utilisé par chaque appel. C'est précisément ce que les génériques vous apportent — et c'est le sujet de ce chapitre.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps6Typage des structures de tables
Annotations de structures en ligneAlias de types pour les structuresPropriétés optionnellesStructures vs tables libresExtension de structuresAjout de méthodes aux structuresMéthodes avec Self et deux-pointsRécapitulatif : Définir des structures de tables9Les génériques : Un premier aperçu
Le problème résolu par les génériquesUne fonction d'identité génériqueUtiliser une fonction génériqueLes tableaux génériquesLes alias de types génériquesRécapitulatif : Les fonctions génériques