Menu
CoddyTech

El problema que resuelven los genéricos

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 61 de 80.

Imagina que necesitas una función que simplemente devuelva cualquier valor que le pases: una función de identidad. Con los tipos que conoces hasta ahora, tienes dos opciones, y ambas son problemáticas.

Opción uno: escribir una copia por separado para cada tipo. Los cuerpos son idénticos; solo cambian las anotaciones:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

Cada tipo nuevo significa otra copia, y un error que se corrige en una debe corregirse en todas. Eso es precisamente la duplicación que escribes funciones para evitar.

Opción dos: combinarlas en una sola función tipada con any:

local function echo(value: any): any
    return value
end

Ahora una sola función se encarga de todo, pero has sacrificado la seguridad de tipos. Cuando llamas a echo("hello"), el verificador ya no sabe que el resultado es una cadena. Solo conoce any, así que el autocompletado deja de funcionar y se cuelan errores de tipos: se pierde la conexión entre lo que entra y lo que sale.

Lo que realmente quieres es una función que funcione con todos los tipos y recuerde qué tipo se usó en cada llamada. Eso es precisamente lo que ofrecen los genéricos, y son el tema de este capítulo.

challenge icon

Desafío

Fácil

Observa qué olvida la versión any de echo.

  1. Escribe local function echo(value: any): any que devuelva value.
  2. Guarda echo("hello") en local result.
  3. Imprime result y después typeof(result).

Pulsa Ejecutar código: el resultado muestra hello y string.

Pruébalo tú mismo

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

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online