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)
endOs 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 HeroIsso é 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.
Desafio
FácilCrie 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:
- A mensagem de saudação para armazenar em
greeter.message - 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)
endAo 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çãoEsta 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
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas