Menu
Coddy logo textTech

Métodos Getter

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

Você aprendeu a armazenar dados em variáveis de instância como self.health ou self.items. Embora você possa acessar esses campos diretamente de fora do objeto, existe uma abordagem mais limpa: usar métodos getter.

Um getter (também chamado de método acessor) é um método simples que retorna um valor interno. Em vez de acessar player.health diretamente, você chama player:getHealth():

local Player = {}
Player.__index = Player

function Player:new(name)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.health = 100
    return instance
end

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Por que se preocupar com um método extra? Getters fornecem um ponto de acesso controlado aos seus dados.

No momento, :getHealth() simplesmente retorna o valor. Mas depois, você pode querer adicionar lógica — talvez retornando "Critical" se a vida cair abaixo de 10, ou registrando toda vez que a vida for verificada.

Com um getter implementado, você pode fazer essas alterações sem modificar nenhum código que utilize o objeto.

local hero = Player:new("Luna")
print(hero:getHealth())  -- Saída: 100
print(hero:getName())    -- Saída: Luna

Este padrão cria uma fronteira clara entre a estrutura interna de um objeto e como outros códigos interagem com ele. O mundo externo solicita dados por meio de métodos, em vez de acessar diretamente os campos do objeto.

challenge icon

Desafio

Fácil

Vamos construir uma classe Player que utiliza métodos getter para acessar seus dados internos. Em vez de acessar diretamente os campos do jogador, você criará métodos que fornecem acesso controlado às informações do jogador.

Você organizará seu código em dois arquivos:

  • Player.lua: Defina sua classe Player com o padrão de protótipo padrão. O construtor deve aceitar um nome e inicializar a saúde em 100. Adicione três métodos getter:
    • :getName() retorna o nome do jogador
    • :getHealth() retorna a saúde atual do jogador
    • :getStatus() retorna uma string formatada combinando ambas as informações
  • main.lua: Importe seu módulo Player e crie uma instância de jogador. Use os métodos getter para exibir as informações do jogador — acesse tudo por meio de métodos em vez de ler os campos diretamente.

Seu método :getStatus() deve retornar uma string neste formato exato:

[name] has [health] HP

Você receberá uma entrada: o nome do jogador.

No seu arquivo principal, crie um jogador com o nome fornecido e, em seguida, imprima três linhas usando seus métodos getter:

  1. O nome do jogador (usando :getName())
  2. A saúde do jogador (usando :getHealth())
  3. O status completo do jogador (usando :getStatus())

Por exemplo, se a entrada for Luna, a saída deve ser:

Luna
100
Luna has 100 HP

Folha de consulta

Um método getter (ou método de acesso) é um método que retorna um valor interno de um objeto. Em vez de acessar os campos diretamente, você chama um método para recuperar os dados.

Métodos getter básicos:

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Usando métodos getter:

local hero = Player:new("Luna")
print(hero:getHealth())  -- Saída: 100
print(hero:getName())    -- Saída: Luna

Getters fornecem um ponto de acesso controlado aos seus dados. Eles criam uma fronteira clara entre a estrutura interna de um objeto e como outros códigos interagem com ele. Isso permite que você adicione lógica posteriormente (como validação ou registro de logs) sem modificar o código que utiliza o objeto.

Experimente você mesmo

-- Requer o módulo Player
local Player = require('Player')

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

-- TODO: Criar uma instância de jogador com o nome fornecido

-- TODO: Imprimir o nome do jogador usando :getName()

-- TODO: Imprimir a vida do jogador usando :getHealth()

-- TODO: Imprimir o status do jogador usando :getStatus()
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