Adicionando Métodos a Formatos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 44 de 80.
Do capítulo sobre OOP em Lua, você sabe que tabelas podem conter funções, assim como qualquer outro valor. Os formatos também podem descrever esses campos de função: transformando um formato em um pequeno contrato de dados e comportamento.
Um campo de método usa a sintaxe de tipo de função que você aprendeu no capítulo sobre funções. Seu primeiro parâmetro costuma ser chamado de self, a tabela à qual o método pertence, e o formato pode até referenciar a si mesmo:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Para implementar o formato, armazene uma função no campo e dê a ela esse parâmetro self:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Chamála significa passar você mesmo a tabela como self: greeter.greet(greeter). Por meio de self, o método lê os campos da tabela em que foi chamado.
Escrever a tabela duas vezes parece desajeitado, e você já conhece a solução do Lua: os dois-pontos. A próxima lição conecta a sintaxe : a esses formatos tipados.
Desafio
FácilDê a uma forma de retângulo um método que calcule sua área.
- Escreva
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}. - Crie
local rect: Rectanglecom largura4, altura6earea = function(self: Rectangle): numberretornandoself.width * self.height. - Imprima
rect.area(rect), depoisrect.width.
Pressione Run Code: a saída mostra 24 e 4.
Experimente você mesmo
-- 1) tipo Rectangle com width, height e um método area
-- 2) rect local: Rectangle (width 4, height 6) com area implementado
-- 3) imprima a área e, depois, a largura
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 TabelasPratique por conta própria: Compilador de Luau online