Menu
CoddyTech

Le problème résolu par les génériques

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 61 sur 80.

Imagine que tu as besoin d’une fonction qui renvoie simplement la valeur que tu lui transmets : une fonction identité. Avec les types que tu connais jusqu’ici, tu as deux options, et les deux sont pénibles.

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
end

Chaque nouveau type implique une autre copie, et un bogue corrigé dans l’une doit l’être dans toutes. C’est précisément le genre de duplication que les fonctions sont censées éviter.

Deuxième option : les regrouper dans 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 tu as perdu la sûreté des types. Lorsque tu appelles echo("hello"), le vérificateur ne sait plus que le résultat est une chaîne. Il ne connaît que any, donc la saisie semi-automatique disparaît et les erreurs de type passent inaperçues : le lien entre ce qui est transmis à la fonction et ce qui en sort est perdu.

Ce que tu veux vraiment, c’est une fonction qui fonctionne avec tous les types et qui se souvient du type utilisé pour chaque appel. C’est précisément ce que permettent les génériques, et ils sont le sujet de ce chapitre.

challenge icon

Défi

Facile

Voyez ce que la version any de echo oublie.

  1. Écrivez local function echo(value: any): any qui renvoie value.
  2. Stockez echo("hello") dans local result.
  3. Affichez result, puis typeof(result).

Appuyez sur Run Code : la sortie affiche hello et string.

Essayez vous-même

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) afficher result et typeof(result)

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne