Adicionando Métodos a Formatos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 42 de 73.
Do seu capítulo sobre OOP em Lua, você sabe que as tabelas podem armazenar 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 é convencionalmente 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 forneça esse parâmetro self:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Chamá-lo significa passar a tabela como self por conta própria: greeter.greet(greeter). Por meio de self, o método lê os campos de qualquer tabela na qual 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ácilCrie um alias de tipo chamado Rectangle com:
widthdo tiponumberheightdo tiponumberarea: um método(self: Rectangle) -> numberque retornewidth * heightperimeter: um método(self: Rectangle) -> numberque retorne2 * (width + height)
Crie uma variável rect do tipo Rectangle com largura 4, altura 6 e ambos os métodos implementados (lembre-se do parâmetro self).
Imprima, cada um em sua própria linha (chame os métodos usando a sintaxe de ponto, passando rect como self):
- a área do retângulo
- o perímetro do retângulo
- a largura do retângulo
Experimente você mesmo
-- Escreva o código aqui
-- 1) defina o tipo Rectangle com dois campos number e dois métodos
-- 2) crie rect (width 4, height 6) implementando ambos os métodos
-- 3) imprima area, perimeter e width
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