Menu
Coddy logo textTech

Self e Métodos com Dois Pontos

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 43 de 73.

Escrever rect.area(rect) funciona, mas você aprendeu uma maneira melhor lá atrás em OOP com Lua: os dois-pontos. rect:area() é exatamente a mesma chamada: Lua passa a tabela antes dos dois-pontos como o primeiro argumento, self, automaticamente.

Os dois-pontos também ajudam no local da definição. function account:deposit(amount) declara para você um primeiro parâmetro oculto chamado self:

type Account = {
    owner: string,
    balance: number,
    deposit: (self: Account, amount: number) -> (),
    getBalance: (self: Account) -> number,
}

local account = {owner = "Maya", balance = 1500}

function account:deposit(amount: number)
    self.balance += amount -- self é implícito
end

function account:getBalance(): number
    return self.balance
end

Observe como a estrutura declara self explicitamente, deposit: (self: Account, amount: number) -> (), embora os dois-pontos o ocultem na implementação. Os dois-pontos são apenas açúcar sintático; o parâmetro ainda está lá, e o tipo o explicita. Um método que não retorna nada é tipado com o retorno vazio -> ().

A chamada segue a mesma regra que você já conhece: account:deposit(250) é idêntica a account.deposit(account, 250). O mesmo comportamento em tempo de execução do seu capítulo de OOP: Luau apenas adiciona tipos por cima.

challenge icon

Desafio

Fácil

Crie um alias de tipo chamado Account com:

  • owner do tipo string
  • balance do tipo number
  • deposit: (self: Account, amount: number) -> ()
  • getBalance: (self: Account) -> number

Crie uma tabela account com owner "Maya" e balance 1500 e, em seguida, associe ambos os métodos usando a sintaxe de definição com dois-pontos (function account:deposit(amount: number) …). deposit adiciona amount ao saldo; getBalance retorna o saldo atual.

Usando chamadas com dois-pontos:

  1. imprima o saldo
  2. deposite 250
  3. imprima o saldo novamente
  4. imprima o proprietário

Experimente você mesmo

-- Escreva o código aqui
-- 1) defina o tipo Account (métodos recebem self explicitamente no tipo)
-- 2) crie a tabela account, depois anexe deposit/getBalance com a sintaxe de dois-pontos
-- 3) imprima o saldo, deposite 250, imprima o saldo novamente, imprima o owner
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

Pratique por conta própria: Compilador de Lua online