Arrays genéricos
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 60 de 73.
Los genéricos se vuelven realmente útiles cuando hay tablas de por medio. Ya escribes arrays con tipo como {number} o {string} — dentro de una función genérica el tipo de elemento puede ser simplemente T, y {T} significa "un array de lo que sea que resulte ser T".
Aquí está el ejemplo clásico — obtener el primer elemento de cualquier array:
local function first<T>(items: {T}): T?
return items[1]
endPasa un {string} y el verificador infiere T = string, por lo que el resultado es un string. Pasa un {number} y es un number. Una sola función reemplaza a toda una familia de copias por cada tipo.
Mira de cerca el tipo de retorno: es T?, no T. Un array puede estar vacío, y después items[1] es nil — el tipo opcional que conociste antes lo dice sinceramente: "un T, o nil". El verificador impulsará a quienes llamen a la función a manejar el caso nil antes de usar el resultado, que es exactamente la detección de errores que esperas de un lenguaje con tipos.
Desafío
FácilCrea una función genérica llamada first que:
- declare un parámetro de tipo
T - acepte un parámetro llamado
itemsde tipo{T} - devuelva el primer elemento, con tipo de retorno
T?(esnilpara un array vacío)
Crea estos arrays con tipo:
fruitsde tipo{string}con"apple","banana","cherry"scoresde tipo{number}con10,20,30,40flagsde tipo{boolean}confalse,trueemptyde tipo{string}sin elementos
Imprime el resultado de llamar a first con cada array, en ese orden, cada uno en su propia línea.
Pruébalo tú mismo
-- Escribe código aquí
-- 1) define first<T>(items: {T}): T? returning items[1]
-- 2) crea fruits: {string}, scores: {number}, flags: {boolean},
-- y un array {string} vacío
-- 3) imprime first(...) de cada array, en ese orden
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