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 forma loose que você sempre usou em Lua e as shapes declaradas. Vale a pena fazer uma pausa para ver o que cada uma oferece.
Uma tabela loose aceita qualquer coisa. Essa flexibilidade tem um preço: erre a grafia de um campo (user.nmae) e você receberá nil silenciosamente (silently); esqueça um campo e o erro (error) surgirá longe, em tempo de execução, em qualquer código que tocar pela primeira vez na lacuna:
local user = {name = "Ana", age = 20}
print(user.nmae) -- loose table: silently prints nilDeclare uma shape e esses erros mudam do tempo de execução para o tempo de edição. O verificador sinaliza o erro de digitação no momento em que você o escreve, seu editor pode autocompletar nomes de campos e a declaração de type serve também como documentação do que a table contém:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ type error: key 'nmae' not found in UserSe você vem do TypeScript, note que Luau não possui a palavra-chave interface — type lida com todas as shapes. Também não há "mesclagem de declarações": declarar dois tipos com o mesmo nome no mesmo escopo gera um erro (error), portanto cada shape tem exatamente uma definição.
As shapes do Luau são estruturais: qualquer table com os campos corretos e os tipos corretos corresponde, não importa onde ou como foi criada. E tabelas loose ainda têm seu lugar — scripts rápidos e dados verdadeiramente dinâmicos não precisam de uma shape declarada. Para qualquer coisa passada entre funções, no entanto, uma shape captura erros enquanto eles ainda são baratos.
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 Tabelas