Menu
Coddy logo textTech

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 de POO em Lua, você sabe que tabelas podem conter funções assim como qualquer outro valor. Shapes também podem descrever esses campos de função — transformando um shape 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 de funções. Seu primeiro parâmetro é convencionalmente chamado de self — a tabela à qual o método pertence — e o shape pode até referenciar a si mesmo:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

Para implementar o shape, armazene uma função no campo e forneça a ela 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 você mesmo: greeter.greet(greeter). Através do self, o método lê os campos de qualquer tabela em que foi chamado.

Escrever a tabela duas vezes parece deselegante — e você já conhece a solução de Lua: os dois pontos. A próxima lição conecta a sintaxe : a estes shapes tipados.

challenge icon

Desafio

Fácil

Crie um tipo alias chamado Rectangle com:

  • width do tipo number
  • height do tipo number
  • area — um método (self: Rectangle) -> number retornando width * height
  • perimeter — um método (self: Rectangle) -> number retornando 2 * (width + height)

Crie uma variável rect do tipo Rectangle com width 4, height 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 com sintaxe de ponto, passando rect como self):

  1. a área do retângulo
  2. o perímetro do retângulo
  3. a largura (width) 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
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