Arrays Genéricos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 60 de 73.
Os genéricos se tornam 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 ser simplesmente T, e {T} significa "um array do que quer que T venha a ser".
Aqui está o exemplo clássico: buscar 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 ele será 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: ele é T?, não T. Um array pode estar vazio e, nesse caso, items[1] é nil: o tipo opcional que você conheceu anteriormente afirma isso honestamente: "um T ou nil". O verificador vai incentivar quem chama a função a tratar o caso nil antes de usar o resultado, que é exatamente a detecção de erros que você espera de uma linguagem tipada.
Desafio
FácilCrie uma função genérica chamada first que:
- declare um parâmetro de tipo
T - aceite um parâmetro chamado
itemsdo tipo{T} - retorne o primeiro elemento, com 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éricasPratique por conta própria: Compilador de Lua online