Menu
Coddy logo textTech

A Sintaxe de Dois-pontos

Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 3 de 70.

Escrever counter.increment(counter) toda vez é tedioso e propenso a erros. 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

Os dois pontos também funcionam 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. Os dois pontos lidam com o parâmetro self em ambos os lados — 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 forma 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 tabela chamada greeter com um campo message inicializado com um valor que você receberá como entrada.

Adicione um método :sayHello(name) usando a sintaxe de dois pontos que imprime a saudação neste formato:

[message], [name]!

Você receberá duas entradas:

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

Defina o método usando a sintaxe de dois pontos e chame-o usando a sintaxe de dois pontos. Imprima a saudação formatada.

Por exemplo, se a mensagem for Welcome e o nome for Luna, a saída deve ser:

Welcome, Luna!

Folha de consulta

O operador de dois pontos (:) fornece uma sintaxe mais limpa para definir e chamar métodos em Lua, lidando automaticamente com o parâmetro self.

Ao definir uma função com dois pontos, o self é adicionado automaticamente como o primeiro parâmetro:

function player:greet()
    print("Hello, I am " .. self.name)
end

Ao chamar uma função com dois pontos, a tabela é passada automaticamente como o primeiro argumento:

player:greet()  -- Equivalente a player.greet(player)

Comparação da sintaxe de ponto vs sintaxe de dois pontos:

-- 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 forma padrão de definir e chamar métodos em Lua, tornando o código mais curto e menos repetitivo.

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 Object Oriented Programming