instanceof et introspection des types
Implémentez des vérifications instanceof() en parcourant la hiérarchie des classes.
instanceof et introspection des types est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.
Qu’est-ce que instanceof ?
instanceof(obj, Class) vérifie si un objet est une instance d’une classe précise ou de l’un de ses ancêtres. Il remplace le type() brut de Lua dans les systèmes orientés objet.
instanceof élémentaire
Parcourez la chaîne de tables de métadonnées depuis l’instance vers les ancêtres, en recherchant la classe cible.
local function instanceof(obj, cls)
if type(obj) ~= "table" then return false end
local mt = getmetatable(obj)
while mt do
if mt == cls then return true end
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return false
endTester instanceof
Fonctionne correctement avec les chaînes d’héritage.
local cat = Animal:new("Cat","Meow")
local rex = Dog:new("Rex")
print(instanceof(rex, Dog)) -- true
print(instanceof(rex, Animal)) -- true
print(instanceof(cat, Dog)) -- falseConvention du champ __type
Stockez le nom du type sous forme de chaîne dans chaque classe afin d’effectuer rapidement des vérifications de type à l’exécution.
Animal.__type = "Animal"
Dog.__type = "Dog"
local function typeOf(obj)
local mt = getmetatable(obj)
return mt and mt.__type or type(obj)
end
print(typeOf(rex)) -- DogGardes de type
Créez des fonctions de garde de type pour effectuer des assertions plus claires aux limites de l’API.
local function assertType(obj, cls, argName)
if not instanceof(obj, cls) then
error(("Expected %s for %s, got %s"):format(
cls.__name, argName, typeOf(obj)), 2)
end
endgetmetatable pour détecter les classes
getmetatable(obj) renvoie la table de la classe. Comparez-la à une classe connue pour vérifier le type exact (sans tenir compte de l’héritage).
local function exactType(obj)
return getmetatable(obj)
end
print(exactType(rex) == Dog) -- true
print(exactType(rex) == Animal) -- false (not exact)Introspection de la hiérarchie des classes
Parcourez la chaîne de tables de métadonnées pour répertorier toutes les classes dont un objet hérite.
local function classChain(obj)
local chain = {}
local mt = getmetatable(obj)
while mt do
chain[#chain+1] = mt.__name or "?"
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return chain
endComparaison des systèmes de types
Le type() intégré à Lua ne renvoie que 8 types de base. Pour les systèmes orientés objet, utilisez instanceof ou des fonctions typeOf personnalisées qui comprennent la hiérarchie des classes.
Classes scellées
Empêchez la création de sous-classes en supprimant la méthode :extend() d’une classe ou en ajoutant une vérification dans __index.
Distribution fondée sur le type
Distribuez les appels de fonction selon le type à l’exécution : une alternative légère à la surcharge de méthodes.
local function process(animal)
if instanceof(animal, Dog) then
print("Processing Dog:", animal.name)
elseif instanceof(animal, Animal) then
print("Processing Animal:", animal.name)
end
endDébogage avec des informations de type
Ajoutez __tostring aux classes en y incluant le nom du type pour obtenir des informations de débogage pertinentes.
Question sur instanceof
Que renvoie instanceof(rex, Animal) si Rex est un Dog (qui étend Animal) ?
Récapitulatif : instanceof et introspection des types
instanceof parcourt la chaîne de tables de métadonnées pour effectuer une vérification de type tenant compte de l’héritage. Utilisez les champs __type pour rechercher rapidement un type sous forme de chaîne. Les gardes de type aux limites de l’API détectent rapidement les erreurs de type et fournissent des messages clairs.
Questions Fréquemment Posées
La leçon « instanceof et introspection des types » est-elle gratuite ?
Oui — le texte complet de « instanceof et introspection des types » 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 « instanceof et introspection des types » ?
Implémentez des vérifications instanceof() en parcourant la hiérarchie des classes. 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 4 sur 4.
Combien de temps prend la leçon « instanceof et introspection des types » ?
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
- Conception de la classe de base et du constructeur
- Héritage à plusieurs niveaux
- Composition de mixins et vérification des interfaces
- instanceof et introspection des types