Arrays Genéricos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 64 de 80.
Os genéricos ficam realmente úteis quando tabelas entram em cena. Você já escreve arrays tipados como {number} ou {string}. Dentro de uma função genérica, o tipo do elemento pode simplesmente ser T, e {T} significa “um array de qualquer tipo que T acabar sendo”.
Aqui está o exemplo clássico: obter o primeiro elemento de qualquer array:
local function first<T>(items: {T}): T?
return items[1]
endPasse um {string} e o verificador infere T = string, então o resultado é uma string. Passe um {number} e o resultado é um número. Uma função substitui toda uma família de cópias específicas para cada tipo.
Observe atentamente o tipo de retorno: é T?, não T. Um array pode estar vazio e, nesse caso, items[1] é nil: o tipo opcional que você conheceu anteriormente deixa isso claro: “um T ou nil”. O verificador vai incentivar quem chama a função a tratar o caso nil antes de usar o resultado, exatamente o tipo de detecção de erros que você espera de uma linguagem tipada.
Desafio
FácilObtenha o primeiro elemento de qualquer array.
- Escreva
local function first<T>(items: {T}): T?que retornaitems[1]. - Declare
local fruits: {string} = {"apple", "banana"}elocal empty: {number} = {}. - Imprima
first(fruits), depoisfirst(empty).
Pressione Executar código: a saída mostra apple e nil.
Experimente você mesmo
-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} e um {number} vazio
-- 3) imprima o primeiro de cada um
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
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, 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 MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: 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éricasPratique por conta própria: Compilador de Luau online