Menu
Coddy logo textTech

A Sintaxe de Dois-pontos

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy — lição 3 de 70.

Escrever counter.increment(counter) toda vez é tedioso e propenso a erros. O Lua fornece uma maneira mais limpa: o operador de dois-pontos (:).

Quando você define uma função usando dois-pontos, o Lua adiciona automaticamente self como o primeiro parâmetro:

local player = {
    name = "Hero"
}

-- Usando dois pontos na definição
function player:greet()
    print("Hello, I am " .. self.name)
end

O dois-pontos também funciona ao chamar a função. Ele passa automaticamente a tabela como o primeiro argumento:

player:greet()  -- Saída: Hello, I am Hero

Isso é equivalente a escrever player.greet(player), mas muito mais limpo. O dois-pontos lida com o parâmetro self em ambas as pontas — durante a definição e durante a chamada.

Aqui está uma comparação mostrando ambas as abordagens produzindo resultados idênticos:

local counter = { value = 0 }

-- Sintaxe de ponto (self explícito)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- Sintaxe de dois-pontos (self automático)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

A sintaxe de dois-pontos é a maneira padrão de definir e chamar métodos em Lua. Ela torna seu código mais curto e menos repetitivo.

challenge icon

Desafio

Fácil

Crie uma table chamada greeter com um field message inicializado com o valor que você receberá como input.

Adicione um method :sayHello(name) using a sintaxe de dois-pontos (colon) que imprime o greeting neste formato:

[message], [name]!

Você receberá dois inputs:

  1. A mensagem de saudação para armazenar em greeter.message
  2. Um nome para passar para o método :sayHello()

Crie a definition do método usando a colon syntax e faça a Call dele usando a colon syntax. Faça o print da saudação formatada.

Por exemplo, se a message for Welcome e o nome for Luna, o Output deve ser:

Welcome, Luna!

Experimente você mesmo

-- Ler entrada
local message = io.read()
local name = io.read()

-- TODO: Escreva seu código abaixo
-- 1. Crie uma tabela chamada 'greeter' com um campo 'message'
-- 2. Adicione um método :sayHello(name) usando a sintaxe de dois pontos
-- 3. Chame o método usando a sintaxe de dois pontos para imprimir a saudação
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 Programação Orientada a Objetos