Menu
Coddy logo textTech

Le constructeur :new()

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

Créer des objets manuellement, créer une table empty, définir sa metatable et relier __index devient répétitif. La solution standard consiste à définir directement dans la class une méthode constructeur :new() qui s’occupe de tout cela pour vous.

Voici le modèle :

local Dog = {}
Dog.__index = Dog

function Dog:new()
    local instance = {}
    setmetatable(instance, self)
    return instance
end

function Dog:bark()
    print("Woof!")
end

Décomposons ce qui se passe à l’intérieur de :new(). Tout d’abord, nous créons une table vide appelée instance. Ensuite, nous définissons sa métatable sur self, qui est Dog lorsque nous appelons Dog:new().

Puisque Dog.__index pointe vers Dog lui-même, l’instance peut trouver toutes les méthodes définies dans Dog. Enfin, nous renvoyons le nouvel objet.

Remarquez la ligne Dog.__index = Dog en dehors du constructeur. Il s’agit d’un raccourci courant : au lieu de créer une métatable distincte, la table de classe sert à la fois de prototype et de métatable.

La création d’objets est maintenant propre et cohérente :

local myDog = Dog:new()
myDog:bark()  -- Sortie : Woof!

Chaque classe que tu crées suivra cette même structure. Le constructeur :new() devient l’unique endroit où s’effectue la création d’objets, ce qui rend ton code organisé et prévisible.

challenge icon

Défi

Facile

Construisons une classe Cat en utilisant le modèle de constructeur standard que tu viens d'apprendre. Tu organiseras ton code sur deux fichiers afin de t'exercer à structurer correctement les modules.

Tu vas créer :

  • Cat.lua : définis ta classe Cat avec le modèle de constructeur complet. Ta classe doit inclure :
    • La table de classe avec __index pointant vers elle-même
    • Un constructeur :new() qui crée une instance, définit sa métatable et la renvoie
    • Une méthode :meow() qui affiche le son du chat
    Renvoie la table de classe à la fin du fichier.
  • main.lua : importe ton module Cat et utilise le constructeur pour créer une instance de chat. Appelle ensuite sa méthode afin de vérifier que tout est correctement relié.

Tu recevras une entrée : le nombre de fois que ton chat doit miauler.

Ta méthode :meow() doit afficher exactement :

Meow!

Dans ton fichier principal, crée un chat avec Cat:new() et appelle :meow() le nombre de fois indiqué.

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

Meow!
Meow!
Meow!

Essayez vous-même

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

-- Lire l'entrée : nombre de fois à miauler
local times = tonumber(io.read())

-- TODO: Créer une instance de chat en utilisant Cat:new()

-- TODO: Appeler la méthode :meow() le nombre de fois spécifié
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