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: LunaEste 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.
Desafío
FácilVamos 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 clasePlayercon el patrón de prototipo estándar. El constructor debe aceptar un nombre e inicializar la salud en100. 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] HPRecibirá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:
- El nombre del jugador (usando
:getName()) - La salud del jugador (usando
:getHealth()) - El estado completo del jugador (usando
:getStatus())
Por ejemplo, si la entrada es Luna, la salida debería ser:
Luna
100
Luna has 100 HPHoja 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
endUso de métodos getter:
local hero = Player:new("Luna")
print(hero:getHealth()) -- Salida: 100
print(hero:getName()) -- Salida: LunaLos 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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas