Menu
Coddy logo textTech

Méthodes Setter

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

Les méthodes Getter vous permettent de lire les données internes par l’intermédiaire d’un point d’accès contrôlé. Les méthodes Setter (également appelées méthodes mutatrices) font l’inverse. Elles offrent un moyen contrôlé de modifier l’état interne.

Au lieu d’attribuer directement car.speed = 50, vous appelez car:setSpeed(50) :

local Car = {}
Car.__index = Car

function Car:new()
    local instance = {}
    setmetatable(instance, self)
    instance.speed = 0
    return instance
end

function Car:setSpeed(newSpeed)
    self.speed = newSpeed
end

function Car:getSpeed()
    return self.speed
end

À première vue, cela semble représenter du travail supplémentaire pour le même résultat. Mais les setters deviennent puissants lorsque vous devez ajouter des règles ultérieurement. Imaginez que vous vouliez vous assurer que la vitesse ne devienne jamais négative ou ne dépasse pas une valeur maximale :

function Car:setSpeed(newSpeed)
    if newSpeed < 0 then
        self.speed = 0
    elseif newSpeed > 200 then
        self.speed = 200
    else
        self.speed = newSpeed
    end
end

Désormais, chaque modification de la vitesse passe par votre logique de validation. Tout code utilisant :setSpeed() bénéficie automatiquement de ces vérifications, sans modification. C’est là la véritable valeur des setters. Ils créent un point unique où vous contrôlez la manière dont les données changent, ce qui rend vos objets plus sûrs et plus faciles à maintenir.

challenge icon

Défi

Facile

Construisons une classe Thermostat qui utilise des méthodes setter pour contrôler la température de manière intelligente. Au lieu d’autoriser n’importe quelle valeur de température, votre thermostat imposera des limites raisonnables, en maintenant la température dans une plage confortable.

Vous organiserez votre code sur deux fichiers :

  • Thermostat.lua : définissez votre classe Thermostat avec le modèle standard basé sur un prototype. Chaque thermostat doit suivre sa temperature actuelle. Incluez :
    • Un constructeur :new() qui initialise la température à 20 (une valeur par défaut confortable)
    • Un getter :getTemperature() qui renvoie la température actuelle
    • Un setter :setTemperature(newTemp) qui met à jour la température, tout en la maintenant dans les limites : minimum 10 et maximum 30
  • main.lua : exigez votre module Thermostat et créez une instance de thermostat. Utilisez le setter pour tenter différentes modifications de température et observez comment les limites sont appliquées.

Votre méthode :setTemperature() doit appliquer les règles suivantes :

  • Si la nouvelle température est inférieure à 10, définissez-la sur 10
  • Si la nouvelle température est supérieure à 30, définissez-la sur 30
  • Sinon, définissez-la sur la valeur demandée

Vous recevrez deux entrées :

  1. Première température à définir
  2. Deuxième température à définir

Dans votre fichier principal, créez un thermostat, puis :

  1. Affichez la température initiale
  2. Définissez la température sur la première valeur d’entrée et affichez le résultat
  3. Définissez la température sur la deuxième valeur d’entrée et affichez le résultat

Affichez chaque température sur sa propre ligne (uniquement le nombre).

Par exemple, si les entrées sont 25 et 50, la sortie doit être :

20
25
30

Remarquez que la deuxième tentative de définir la température sur 50 produit 30 : le setter applique automatiquement la limite maximale !

Essayez vous-même

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

-- Lire l'entrée
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())

-- TODO: Créer une instance de thermostat

-- TODO: Afficher la température initiale

-- TODO: Définir la température à temp1 et afficher le résultat

-- TODO: Définir la température à temp2 et afficher le résultat
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