Tabelas com Funções
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 1 de 70.
Em Lua, as tabelas são incrivelmente versáteis. Além de armazenar dados, elas também podem conter funções. Isso permite que você agrupe operações relacionadas, mantendo seu código organizado e fácil de gerenciar.
Para colocar uma função dentro de uma tabela, você simplesmente a atribui a uma chave como qualquer outro valor:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Saída: Hello, AliceVocê também pode definir a função separadamente e depois adicioná-la à tabela:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endOu use esta sintaxe abreviada mais limpa:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endTodas as três abordagens produzem o mesmo resultado. Você chama a função usando a notação de ponto: myTable.greet("Alice"). Este padrão de agrupar funções com dados é a base da programação orientada a objetos em Lua.
Desafio
FácilCrie uma tabela chamada calculator que contenha quatro funções aritméticas:
add(a, b)- retorna a soma deaebsubtract(a, b)- retornaamenosbmultiply(a, b)- retorna o produto deaebdivide(a, b)- retornaadividido porb
Você receberá três entradas:
- Um nome de operação (um de:
add,subtract,multiply,divide) - Primeiro número
- Segundo número
Chame a função apropriada da sua tabela calculator com base no nome da operação e imprima o resultado.
Folha de consulta
Em Lua, as tabelas podem armazenar funções junto com dados. Para adicionar uma função a uma tabela, atribua-a a uma chave:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Saída: Hello, AliceVocê também pode definir funções separadamente e adicioná-las à tabela:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endOu use a sintaxe abreviada:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endChame funções de tabela usando a notação de ponto: myTable.greet("Alice")
Experimente você mesmo
-- Ler as entradas
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
-- TODO: Criar uma tabela calculator com quatro funções:
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
-- TODO: Chamar a função apropriada da tabela calculator usando o nome da operação
-- e imprimir o resultadoEsta 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