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)
endO 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 HeroIsso é 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.
Desafio
FácilCrie 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:
- A mensagem de saudação para armazenar em
greeter.message - 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çãoEsta 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
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ânguloClasse CírculoMétodo PerímetroColeção de FormasÁrea TotalFiltrar Formas2Padrã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