Menu
Coddy logo textTech

Metodi getter

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 13 di 70.

Hai imparato a memorizzare i dati in variabili di istanza come self.health o self.items. Anche se puoi accedere direttamente a questi campi dall'esterno dell'oggetto, c'è un approccio più pulito: usare i metodi getter.

Un getter (chiamato anche metodo di accesso) è un metodo semplice che restituisce un valore interno. Invece di accedere direttamente a player.health, chiami 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

Perché preoccuparsi di un metodo in più? I metodi getter forniscono un punto di accesso controllato ai tuoi dati.

Al momento, :getHealth() restituisce semplicemente il valore. Ma in seguito potresti voler aggiungere della logica: magari restituire "Critical" se la salute scende sotto 10, oppure registrare un log ogni volta che viene controllata la salute.

Con un getter in posizione, puoi apportare queste modifiche senza modificare il codice che usa l'oggetto.

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

Questo schema crea un confine chiaro tra la struttura interna di un oggetto e il modo in cui altro codice interagisce con esso. Il mondo esterno richiede dati tramite metodi, invece di accedere direttamente ai campi dell'oggetto.

challenge icon

Sfida

Facile

Costruiamo una classe Player che usa metodi getter per accedere ai propri dati interni. Invece di accedere direttamente ai campi del giocatore, creerai metodi che consentono un accesso controllato alle informazioni del giocatore.

Organizzerai il codice in due file:

  • Player.lua: Definisci la classe Player usando il modello standard basato sui prototipi. Il costruttore deve accettare un nome e inizializzare la salute a 100. Aggiungi tre metodi getter:
    • :getName() restituisce il nome del giocatore
    • :getHealth() restituisce la salute attuale del giocatore
    • :getStatus() restituisce una stringa formattata che combina entrambe le informazioni
  • main.lua: Importa il modulo Player e crea un'istanza del giocatore. Usa i metodi getter per mostrare le informazioni del giocatore: accedi a tutto tramite i metodi, invece di leggere direttamente i campi.

Il metodo :getStatus() deve restituire una stringa nel seguente formato esatto:

[name] has [health] HP

Riceverai un input: il nome del giocatore.

Nel tuo file principale, crea un giocatore con il nome fornito, quindi stampa tre righe usando i metodi getter:

  1. Il nome del giocatore (usando :getName())
  2. La salute del giocatore (usando :getHealth())
  3. Lo stato completo del giocatore (usando :getStatus())

Per esempio, se l'input è Luna, l'output dovrebbe essere:

Luna
100
Luna has 100 HP

Provalo tu

-- Carica il modulo Player
local Player = require('Player')

-- Leggi l'input
local name = io.read()

-- TODO: Crea un'istanza di Player con il nome fornito

-- TODO: Stampa il nome del giocatore usando :getName()

-- TODO: Stampa la salute del giocatore usando :getHealth()

-- TODO: Stampa lo stato del giocatore usando :getStatus()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online