Menu
Coddy logo textTech

Métodos Getter

Parte de la sección Programación Orientada a Objetos 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

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 Programación Orientada a Objetos