Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Dê a uma forma de retângulo um método que calcule sua área.

  1. Escreva type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}.
  2. Crie local rect: Rectangle com largura 4, altura 6 e area = function(self: Rectangle): number retornando self.width * self.height.
  3. Imprima rect.area(rect), depois rect.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

Pratique por conta própria: Compilador de Luau online