Arrays Genéricos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 60 de 73.
Generics get really useful once tables are involved. You already write typed arrays as {number} or {string} — inside a generic function the element type can simply be T, and {T} means "an array of whatever T turns out to be".
Here's the classic example — fetching the first element of any array:
local function first<T>(items: {T}): T?
return items[1]
endPass a {string} and the checker infers T = string, so the result is a string. Pass a {number} and it's a number. One function replaces a whole family of per-type copies.
Look closely at the return type: it's T?, not T. An array can be empty, and then items[1] is nil — the optional type you met earlier says so honestly: "a T, or nil". The checker will nudge callers to handle the nil case before using the result, which is exactly the bug-catching you want from a typed language.
Desafio
FácilCrie uma função genérica chamada first que:
- declara um parâmetro de tipo
T - aceita um parâmetro chamado
itemsdo tipo{T} - retorna o primeiro elemento, com o tipo de retorno
T?(énilpara um array vazio)
Crie estes arrays tipados:
fruitsdo tipo{string}com"apple","banana","cherry"scoresdo tipo{number}com10,20,30,40flagsdo tipo{boolean}comfalse,trueemptydo tipo{string}sem elementos
Imprima o resultado de chamar first com cada array, nessa ordem, cada um em sua própria linha.
Experimente você mesmo
-- Escreva o código aqui
-- 1) defina first<T>(items: {T}): T? retornando items[1]
-- 2) crie fruits: {string}, scores: {number}, flags: {boolean},
-- e um array {string} vazio
-- 3) imprima first(...) de cada array, nessa ordem
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Introdução ao Luau
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com Funções
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps6Tipando Formatos de Tabelas
Anotações de Formato InlineAliases de Tipo para FormatosPropriedades OpcionaisFormatos vs. Tabelas FlexíveisEstendendo FormatosAdicionando Métodos a FormatosSelf e Métodos com Dois PontosRecapitulação: Definindo Formatos de Tabelas9Generics: Uma Primeira Visão
O Problema que Generics ResolvemUma Função de Identidade GenéricaUsando uma Função GenéricaArrays GenéricosAliases de Tipos GenéricosRecapitulação: Funções Genéricas