Menu
Coddy logo textTech

Méthodes Getter

Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 13 sur 70.

Tu as appris à stocker des données dans des variables d’instance comme self.health ou self.items. Bien que tu puisses accéder directement à ces champs depuis l’extérieur de l’objet, il existe une approche plus claire : utiliser des méthodes d’accès.

Un getter (également appelé méthode d’accès) est une méthode simple qui renvoie une valeur interne. Au lieu d’accéder directement à player.health, vous appelez 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

Pourquoi s’embarrasser d’une méthode supplémentaire ? Les getters fournissent un point d’accès contrôlé à vos données.

Pour l’instant, :getHealth() renvoie simplement la valeur. Mais plus tard, tu pourrais vouloir ajouter une logique : par exemple, renvoyer "Critical" si la santé descend en dessous de 10, ou enregistrer chaque vérification de la santé.

Avec un accesseur en place, vous pouvez effectuer ces changements sans modifier le code qui utilise l’objet.

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

Ce pattern crée une séparation claire entre la structure interne d’un objet et la manière dont les autres codes interagissent avec lui. Le monde extérieur demande des données via des méthodes plutôt que d’accéder directement aux champs de l’objet.

challenge icon

Défi

Facile

Construisons une classe Player qui utilise des méthodes getter pour accéder à ses données internes. Au lieu d'accéder directement aux champs du joueur, tu vas créer des méthodes qui fournissent un accès contrôlé aux informations du joueur.

Tu organiseras ton code sur deux fichiers :

  • Player.lua : définis ta classe Player avec le modèle de prototype standard. Le constructeur doit accepter un nom et initialiser la santé à 100. Ajoute trois méthodes getter :
    • :getName() renvoie le nom du joueur
    • :getHealth() renvoie la santé actuelle du joueur
    • :getStatus() renvoie une chaîne formatée combinant ces deux informations
  • main.lua : importe ton module Player et crée une instance de joueur. Utilise les méthodes getter pour afficher les informations du joueur : accède à tout par l'intermédiaire des méthodes plutôt que de lire directement les champs.

Ta méthode :getStatus() doit renvoyer une chaîne dans ce format exact :

[name] has [health] HP

Tu recevras une entrée : le nom du joueur.

Dans ton fichier principal, crée un joueur avec le nom fourni, puis affiche trois lignes en utilisant tes méthodes getter :

  1. Le nom du joueur (avec :getName())
  2. La santé du joueur (avec :getHealth())
  3. Le statut complet du joueur (avec :getStatus())

Par exemple, si l'entrée est Luna, la sortie doit être :

Luna
100
Luna has 100 HP

Essayez vous-même

-- Charger le module Player
local Player = require('Player')

-- Lire l'entrée
local name = io.read()

-- TODO: Créer une instance de Player avec le nom donné

-- TODO: Afficher le nom du joueur en utilisant :getName()

-- TODO: Afficher la santé du joueur en utilisant :getHealth()

-- TODO: Afficher le statut du joueur en utilisant :getStatus()
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne