instanceof e introspecção de tipos
Implemente verificações instanceof() percorrendo a hierarquia de classes.
instanceof e introspecção de tipos é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é instanceof?
instanceof(obj, Class) verifica se um objeto é uma instância de uma classe específica ou de qualquer um de seus ancestrais. Ele substitui o type() básico do Lua nos sistemas orientados a objetos.
instanceof simples
Percorra a cadeia de metatabelas da instância para cima, procurando a classe de destino.
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
endTestando instanceof
Funciona corretamente em cadeias de herança.
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)) -- falseConvenção do campo __type
Armazene o nome textual do tipo em cada classe para realizar verificações rápidas de tipo em tempo de execução.
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)) -- DogGuardas de tipo
Crie funções de guarda de tipo para fazer asserções de forma mais clara nos limites da 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 para detecção de classes
getmetatable(obj) retorna a tabela da classe. Compare-a com uma classe conhecida para testar o tipo exato (sem considerar a herança).
local function exactType(obj)
return getmetatable(obj)
end
print(exactType(rex) == Dog) -- true
print(exactType(rex) == Animal) -- false (not exact)Introspecção da hierarquia de classes
Percorra a cadeia de metatabelas para listar todas as classes das quais um objeto herda.
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
endComparação de sistemas de tipos
O type() integrado do Lua retorna apenas 8 tipos básicos. Nos sistemas orientados a objetos, use instanceof ou funções typeOf personalizadas que entendam a hierarquia de classes.
Classes seladas
Impeça a criação de subclasses removendo o método :extend() de uma classe ou adicionando uma verificação em __index.
Despacho baseado em tipo
Selecione as funções a serem chamadas com base no tipo em tempo de execução — uma alternativa leve à sobrecarga de métodos.
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
endDepuração com informações de tipo
Adicione __tostring às classes, incluindo o nome do tipo, para obter uma saída de depuração significativa.
Pergunta sobre instanceof
O que instanceof(rex, Animal) retorna se Rex for um Dog (que estende Animal)?
Recapitulação: instanceof e introspecção de tipos
instanceof percorre a cadeia de metatabelas para verificar tipos levando a herança em consideração. Use campos __type para obter rapidamente o tipo como texto. Guardas de tipo nos limites da API detectam erros de tipo antecipadamente e exibem mensagens claras.
Aprenda Lua com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 40
- Aulas
- 159
Perguntas Frequentes
A aula “instanceof e introspecção de tipos” é grátis?
Sim — o texto completo de “instanceof e introspecção de tipos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “instanceof e introspecção de tipos”?
Implemente verificações instanceof() percorrendo a hierarquia de classes. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “instanceof e introspecção de tipos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Design de classe-base e construtor
- Herança em vários níveis
- Composição de mixins e verificações de interface
- instanceof e introspecção de tipos