Menu
Coddy logo textTech

Métodos Getter

Parte da seção Programação Orientada a Objetos 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 organizada: usando 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 dar ao trabalho de usar um método extra? Getters fornecem um ponto de acesso controlado aos seus dados.

Por enquanto, :getHealth() simplesmente retorna o valor. Mas, mais tarde, talvez você queira adicionar lógica: talvez retornar "Crítico" se a saúde cair abaixo de 10 ou registrar cada vez que a saúde for verificada.

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

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

Este padrão cria um limite claro entre a estrutura interna de um objeto e a forma 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 criar uma classe Player que usa 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 convencional. O construtor deve aceitar um nome e inicializar a saúde com 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 as duas informações
  • main.lua: exija 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 exatamente neste formato:

[name] has [health] HP

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

Em 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 deverá ser:

Luna
100
Luna has 100 HP

Experimente você mesmo

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

-- Lê a entrada
local name = io.read()

-- TODO: Crie uma instância de player com o nome fornecido

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

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

-- TODO: Imprima 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 Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online