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: LunaEste 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.
Desafío
FácilConstruyamos 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 clasePlayercon el patrón de prototipo estándar. El constructor debe aceptar un nombre e inicializar la salud a100. 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] HPRecibirá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:
- 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 HPPrué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()
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
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 formasPractica por tu cuenta: Compilador de Lua online