Menu
Coddy logo textTech

Métodos Getter

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 13 de 70.

Has aprendido a almacenar datos en variables de instancia como self.health o self.items. Aunque puedes acceder a estos campos directamente desde fuera del objeto, existe un enfoque más limpio: usar métodos getter.

Un getter (también llamado método de acceso) es un método simple que devuelve un valor interno. En lugar de acceder a player.health directamente, llamas a 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 qué molestarse con un método adicional? Los getters proporcionan un punto de acceso controlado a sus datos.

En este momento, :getHealth() simplemente devuelve el valor. Pero más adelante, es posible que desees agregar lógica: tal vez devolviendo "Critical" si la salud cae por debajo de 10, o registrando cada vez que se verifica la salud.

Con un getter implementado, puedes realizar estos cambios sin modificar ningún código que utilice el objeto.

local hero = Player:new("Luna")
print(hero:getHealth())  -- Salida: 100
print(hero:getName())    -- Salida: Luna

Este patrón crea un límite claro entre la estructura interna de un objeto y cómo el resto del código interactúa con él. El mundo exterior solicita datos a través de métodos en lugar de acceder directamente a los campos del objeto.

challenge icon

Desafío

Fácil

Vamos a construir una clase Player que utilice métodos getter para acceder a sus datos internos. En lugar de acceder directamente a los campos del jugador, crearás métodos que proporcionen un acceso controlado a la información del jugador.

Organizarás tu código en dos archivos:

  • Player.lua: Define tu clase Player con el patrón de prototipo estándar. El constructor debe aceptar un nombre e inicializar la salud en 100. Añade tres métodos getter:
    • :getName() devuelve el nombre del jugador
    • :getHealth() devuelve la salud actual del jugador
    • :getStatus() devuelve una cadena formateada que combina ambas piezas de información
  • main.lua: Requiere tu módulo Player y crea una instancia de jugador. Utiliza los métodos getter para mostrar la información del jugador; accede a todo a través de métodos en lugar de leer los campos directamente.

Tu método :getStatus() debe devolver una cadena en este formato exacto:

[name] has [health] HP

Recibirás una entrada: el nombre del jugador.

En tu archivo principal, crea un jugador con el nombre dado, luego imprime tres líneas usando tus métodos getter:

  1. El nombre del jugador (usando :getName())
  2. La salud del jugador (usando :getHealth())
  3. El estado completo del jugador (usando :getStatus())

Por ejemplo, si la entrada es Luna, la salida debería ser:

Luna
100
Luna has 100 HP

Hoja de referencia

Un método getter (o método de acceso) es un método que devuelve un valor interno de un objeto. En lugar de acceder a los campos directamente, se llama a un método para recuperar los datos.

Métodos getter básicos:

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Uso de métodos getter:

local hero = Player:new("Luna")
print(hero:getHealth())  -- Salida: 100
print(hero:getName())    -- Salida: Luna

Los getters proporcionan un punto de acceso controlado a sus datos. Crean un límite claro entre la estructura interna de un objeto y cómo interactúa el resto del código con él. Esto le permite añadir lógica más adelante (como validación o registro) sin modificar el código que utiliza el objeto.

Pruébalo tú mismo

-- Requerir el módulo Player
local Player = require('Player')

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

-- TODO: Crear una instancia de jugador con el nombre dado

-- TODO: Imprimir el nombre del jugador usando :getName()

-- TODO: Imprimir la salud del jugador usando :getHealth()

-- TODO: Imprimir el estado del jugador usando :getStatus()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming