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 no módulo de OOP em Lua: os dois-pontos (colon). rect:area() é exatamente a mesma chamada — a Lua passa a table antes dos dois-pontos como o primeiro argumento, self, automatically.

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

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

Note como a estrutura declara self explicitlydeposit: (self: Account, amount: number) -> () — mesmo que o colon o esconda na implementação. O colon é apenas um atalho sintático (syntax sugar); o parâmetro ainda está lá, e o type o especifica. Um método que não retorna nada é tipado com o return vazio -> ().

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

challenge icon

Desafio

Fácil

Crie um type alias 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 depois anexe ambos os métodos usando a sintaxe de colon definition (function account:deposit(amount: number) …). deposit adiciona amount ao balance; getBalance retorna o balance atual.

Usando colon calls:

  1. imprima o balance
  2. faça um deposit de 250
  3. imprima o balance novamente
  4. imprima o owner

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 sintaxe de dois pontos
-- 3) imprima o balance, deposite 250, imprima o balance 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