Formatos vs. Tabelas Flexíveis
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 40 de 73.
Agora você tem duas maneiras de trabalhar com tabelas de registros: a maneira flexível que sempre usou em Lua e os formatos declarados. Vale a pena fazer uma pausa para ver o que cada uma oferece.
Uma tabela flexível aceita qualquer coisa. Essa flexibilidade tem um preço: escreva um campo incorretamente (user.nmae) e você obtém silenciosamente nil; esqueça um campo e o bug aparece muito longe dali, em tempo de execução, no primeiro código que tocar na lacuna:
local user = {name = "Ana", age = 20}
print(user.nmae) -- tabela solta: imprime nil silenciosamenteDeclare um formato e esses erros passam do tempo de execução para o momento da edição. O verificador sinaliza o erro de digitação assim que você o escreve, seu editor pode completar automaticamente os nomes dos campos, e a declaração type também serve como documentação do conteúdo da tabela:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ erro de tipo: chave 'nmae' não encontrada em UserSe você vem do TypeScript, observe que Luau não tem a palavra-chave interface: type cuida de todos os formatos. Também não existe "mesclagem de declarações": declarar dois tipos com o mesmo nome no mesmo escopo é um erro, portanto cada formato tem exatamente uma definição.
Os formatos do Luau são estruturais: qualquer tabela com os campos corretos dos tipos corretos corresponde, não importa onde ou como ela foi criada. E as tabelas flexíveis ainda têm seu lugar: scripts rápidos e dados realmente dinâmicos não precisam de um formato declarado. Para qualquer coisa passada entre funções, porém, um formato detecta os erros enquanto eles ainda são fáceis de corrigir.
Experimente você mesmo
Esta lição não inclui um desafio de código.
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 TabelasPratique por conta própria: Compilador de Lua online