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 directamente a estos campos 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 sencillo que devuelve un valor interno. En lugar de acceder directamente a player.health, 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

¿Para qué molestarse con un método adicional? Los getters proporcionan un punto de acceso controlado a tus datos.

Ahora mismo, :getHealth() simplemente devuelve el valor. Pero más adelante, quizá quieras añadir lógica: por ejemplo, devolver "Critical" si la salud baja de 10, o registrar cada vez que se comprueba la salud.

Con un getter implementado, puedes hacer 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 la forma en que otro código interactúa con él. El mundo exterior solicita datos mediante métodos en lugar de acceder directamente a los campos del objeto.

challenge icon

Desafío

Fácil

Construyamos una clase Player que use 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 a 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 del jugador. Usa los métodos getter para mostrar la información del jugador: accede a todo mediante métodos en lugar de leer los campos directamente.

Tu método :getStatus() debe devolver una cadena con 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 proporcionado y después 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
FORMATO DE SALIDA REQUERIDO: [Tu contenido traducido aquí]

Pruébalo tú mismo

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

-- Lee la entrada
local name = io.read()

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

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

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

-- TODO: Imprime 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

Practica por tu cuenta: Compilador de Lua online