Menu
Coddy logo textTech

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 nil

Declare 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 User

Se você vem do TypeScript, note que Luau não possui a palavra-chave interfacetype 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.

quiz iconTeste seus conhecimentos

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