Arrays genéricos
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 64 de 80.
Los genéricos resultan muy útiles cuando se trabaja con tablas. Ya escribes arreglos tipados como {number} o {string}. Dentro de una función genérica, el tipo del elemento puede ser simplemente T, y {T} significa «un arreglo de lo que resulte ser T».
Este es el ejemplo clásico: obtener el primer elemento de cualquier arreglo:
local function first<T>(items: {T}): T?
return items[1]
endPasa un {string} y el verificador infiere T = string, así que el resultado es una cadena. Pasa un {number} y será un número. Una función reemplaza toda una familia de copias para cada tipo.
Fíjate bien en el tipo de retorno: es T?, no T. Un arreglo puede estar vacío, y entonces items[1] es nil: el tipo opcional que conociste antes lo expresa con claridad: «un T o nil». El verificador avisará a quienes llamen a la función que deben gestionar el caso nil antes de usar el resultado, que es precisamente el tipo de detección de errores que quieres de un lenguaje tipado.
Desafío
FácilObtén el primer elemento de cualquier arreglo.
- Escribe
local function first<T>(items: {T}): T?que devuelvaitems[1]. - Declara
local fruits: {string} = {"apple", "banana"}ylocal empty: {number} = {}. - Imprime
first(fruits)y despuésfirst(empty).
Presiona Run Code: la salida muestra apple y nil.
Pruébalo tú mismo
-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} y un {number} vacío
-- 3) imprime el primero de cada uno
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 Luau4Trabajar con funciones
Tipado de parámetros y valores de retornoTipado de funciones anónimasFunciones que no devuelven nadaParámetros opcionalesValores predeterminados de parámetrosValores predeterminados para booleanosFunciones variádicasDefinir tipos de funcionesRepaso: funciones tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La estructura de una tareaFunción para añadir una tarea2Tipos fundamentales
Número, cadena y booleanoEl tipo 'any': una salida de emergenciaEl tipo 'unknown'Tipos nulos y opcionalesLa inferencia de tipos en acciónAnotaciones de tipo explícitasRepaso: práctica de tipos fundamentales5Alias, 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 mapas
Arrays tipadosAgregar y leer elementos¿Qué es un tipo mapa?Declarar y acceder a mapasRecorrer tablasTablas de formas mixtasLeer una cuadrículaConstruir una cuadrículatable.unpackRepaso: arrays y mapas6Definició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éricasPractica por tu cuenta: Compilador de Luau online