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 transmettez : une fonction d’identité. Avec les types que vous connaissez jusqu’à présent, vous avez deux options, et toutes deux posent problème.
Première option : écrire une copie distincte 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 signifie une copie supplémentaire, et un bug corrigé dans l’une doit être corrigé dans toutes les autres. C’est exactement la duplication que vous cherchez à éviter en écrivant des fonctions.
Deuxième option : les regrouper en une seule fonction typée avec any :
local function echo(value: any): any
return value
endÀ présent, une seule fonction gère tout, mais vous avez sacrifié la sécurité des types. Lorsque vous appelez echo("hello"), le vérificateur ne sait plus que le résultat est une chaîne. Il connaît seulement any : l’autocomplétion devient inutilisable et les erreurs de type passent inaperçues ; le lien entre ce qui est passé en entrée et ce qui est renvoyé en sortie est perdu.
Ce que vous voulez vraiment, c’est une fonction qui fonctionne avec chaque type et qui mémorise le type utilisé par chaque appel. C’est précisément ce que les génériques vous offrent, 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ériquesEntraînez-vous par vous-même : Compilateur Lua en ligne