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