0Pricing
Lua Academy · Leçon

Conception de la classe de base et du constructeur

Concevez une fabrique Class() qui configure les métatables et les constructeurs new().

Conception de la classe de base et du constructeur est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Objectif : une fabrique de classes réutilisable

Nous voulons une fonction Class() qui renvoie un nouvel objet classe avec un constructeur approprié, une recherche de méthodes et une sémantique de POO correctes.

Squelette de fabrique de classes

La fabrique crée une table de classe avec une métatable pour la distribution des méthodes.

local function Class()
  local cls = {}
  cls.__index = cls
  cls.__name = "AnonymousClass"
  function cls:new(...)
    local instance = setmetatable({}, cls)
    if instance.init then instance:init(...) end
    return instance
  end
  return cls
end

Définir une classe

Créez une classe, définissez init (le constructeur) et ajoutez des méthodes.

local Animal = Class()
Animal.__name = "Animal"
function Animal:init(name, sound)
  self.name = name
  self.sound = sound
end
function Animal:speak()
  print(self.name .. " says " .. self.sound)
end
local cat = Animal:new("Cat", "Meow")
cat:speak()  -- Cat says Meow

Modèle de constructeur

Le constructeur :new(...) crée une instance avec setmetatable({}, cls), puis appelle :init(...) pour l’initialiser. Cela sépare l’allocation de l’initialisation.

Nom de classe pour le débogage

Stockez cls.__name et définissez __tostring afin que les instances s’affichent de manière pertinente.

function Animal:__tostring()
  return "<" .. Animal.__name .. ": " .. self.name .. ">"
end
print(tostring(cat))  -- <Animal: Cat>

Valeurs par défaut dans init

Fournissez des valeurs par défaut dans init en utilisant or.

function Vehicle:init(opts)
  self.speed  = opts.speed  or 0
  self.fuel   = opts.fuel   or 100
  self.engine = opts.engine or "petrol"
end

Méthodes de classe ou méthodes d’instance

Les méthodes définies avec function cls.method() sont des méthodes de classe (sans self). Les méthodes définies avec function cls:method() reçoivent l’instance comme self.

Propriétés statiques

Les propriétés définies directement dans la table de classe sont partagées par toutes les instances, sauf si elles sont masquées par des champs d’instance.

Animal.count = 0
function Animal:init(name, sound)
  Animal.count = Animal.count + 1
  self.name = name; self.sound = sound
end
print(Animal.count)  -- 0
Animal:new("Dog","Woof")
print(Animal.count)  -- 1

Constructeur de copie

Une méthode :clone() crée une copie d’une instance en copiant superficiellement ses champs.

function Animal:clone()
  local copy = setmetatable({}, getmetatable(self))
  for k, v in pairs(self) do copy[k] = v end
  return copy
end

Métaméthode d’égalité

Définissez __eq pour obtenir des comparaisons d’égalité pertinentes entre les instances.

Animal.__eq = function(a, b)
  return a.name == b.name
end

Pourquoi ne pas utiliser rawget&nbsp;?

Utilisez self.field plutôt que rawget pour permettre l’accès aux champs fondé sur des métaméthodes dans les classes dérivées. N’utilisez rawget que lorsque le contournement est explicitement nécessaire.

Question sur la conception du constructeur

Pourquoi init est-il appelé séparément de l’allocateur new ?

Récapitulatif : classe de base et constructeur

Une fabrique Class() crée une table en tant que classe, définit __index = cls pour la recherche de méthodes et fournit :new() ainsi que :init(). C’est le fondement de tous les modèles de POO en Lua.

Questions Fréquemment Posées

La leçon « Conception de la classe de base et du constructeur » est-elle gratuite ?

Oui — le texte complet de « Conception de la classe de base et du constructeur » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Conception de la classe de base et du constructeur » ?

Concevez une fabrique Class() qui configure les métatables et les constructeurs new(). Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Conception de la classe de base et du constructeur » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Conception de la classe de base et du constructeur
  2. Héritage à plusieurs niveaux
  3. Composition de mixins et vérification des interfaces
  4. instanceof et introspection des types
← Retour à Lua Academy