El problema que resuelven los genéricos
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 57 de 73.
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 perjudiciales.
Opción uno: escribir una copia separada por 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
endCada nuevo tipo significa otra copia, y un error corregido en una debe corregirse en todas. Esa es exactamente la duplicación que se busca evitar al escribir funciones.
Opción dos: unificarlas en una sola función tipada con any:
local function echo(value: any): any
return value
endAhora una sola función lo gestiona todo, pero has pagado con la seguridad de tipos. Cuando llamas a echo("hello"), el checker ya no knows que el result es un string. Solo sabe any, por lo que el autocompletado deja de funcionar y los errores de tipo se escapan: la conexión entre lo que entró y lo que sale se pierde.
Lo que realmente quieres es una función que funcione para cada tipo y recuerde qué tipo utilizó cada llamada. Eso es precisamente lo que te dan los genéricos, y son el tema de este capítulo.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps6Definición de formas de tablas
Anotaciones de forma en líneaAlias de tipos para formasPropiedades opcionalesFormas frente a tablas no estructuradasExtensión de formasAñadir métodos a las formasEl parámetro 'self' y los métodos con dos puntosRecapitulación: Definición de formas de tablas9Genéricos: Una primera mirada
El problema que resuelven los genéricosUna función de identidad genéricaUso de una función genéricaArrays genéricosAlias de tipos genéricosResumen: Funciones genéricas