Menu
Coddy logo textTech

Méthodes Getter

Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 13 sur 70.

Vous avez appris à stocker des données dans des variables d'instance comme self.health ou self.items. Bien que vous puissiez accéder à ces champs directement depuis l'extérieur de l'objet, il existe une approche plus propre : utiliser des méthodes getter.

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'embêter avec une méthode supplémentaire ? Les getters fournissent un point d'accès contrôlé à vos données.

Pour l'instant, :getHealth() retourne simplement la valeur. Mais plus tard, vous pourriez vouloir ajouter de la logique — peut-être en retournant "Critical" si la santé tombe en dessous de 10, ou en enregistrant un log chaque fois que la santé est vérifiée.

Avec un getter en place, vous pouvez effectuer ces modifications sans modifier le code qui utilise l'objet.

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

Ce modèle crée une frontière claire entre la structure interne d'un objet et la manière dont le reste du code interagit 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, vous créerez des méthodes qui fournissent un accès contrôlé aux informations du joueur.

Vous organiserez votre code sur deux fichiers :

  • Player.lua : Définissez votre classe Player avec le modèle de prototype standard. Le constructeur doit accepter un nom et initialiser la santé à 100. Ajoutez trois méthodes getter :
    • :getName() retourne le nom du joueur
    • :getHealth() retourne la santé actuelle du joueur
    • :getStatus() retourne une chaîne formatée combinant les deux informations
  • main.lua : Importez votre module Player et créez une instance de joueur. Utilisez les méthodes getter pour afficher les informations du joueur — accédez à tout via les méthodes plutôt qu'en lisant directement les champs.

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

[name] has [health] HP

Vous recevrez une entrée : le nom du joueur.

Dans votre fichier principal, créez un joueur avec le nom donné, puis affichez trois lignes en utilisant vos méthodes getter :

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

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

Luna
100
Luna has 100 HP

Aide-mémoire

Une méthode getter (ou méthode d'accès) est une méthode qui renvoie une valeur interne d'un objet. Au lieu d'accéder directement aux champs, vous appelez une méthode pour récupérer les données.

Méthodes getter de base :

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Utilisation des méthodes getter :

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

Les getters fournissent un point d'accès contrôlé à vos données. Ils créent une frontière claire entre la structure interne d'un objet et la manière dont le reste du code interagit avec lui. Cela vous permet d'ajouter de la logique plus tard (comme de la validation ou de la journalisation) sans modifier le code qui utilise l'objet.

Essayez vous-même

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

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

-- TODO: Créer une instance de joueur 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 Object Oriented Programming