Composição de mixins e verificações de interface
Combine várias tabelas de comportamento e valide a conformidade com a interface.
Composição de mixins e verificações de interface é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 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 são módulos de mistura?
Módulos de mistura são tabelas de métodos copiadas para uma classe. Eles fornecem comportamentos sem exigir uma relação de herança — são perfeitos para preocupações transversais.
Aplicação simples de um módulo de mistura
Copie métodos de uma tabela de mistura para a classe de destino.
local Serializable = {
serialize = function(self)
local parts = {}
for k, v in pairs(self) do
parts[#parts+1] = k .. "=" .. tostring(v)
end
return "{" .. table.concat(parts, ", ") .. "}"
end
}
local function mixin(cls, ...)
for _, m in ipairs({...}) do
for k, v in pairs(m) do
if cls[k] == nil then cls[k] = v end
end
end
end
mixin(Animal, Serializable)
print(cat:serialize())Sobrescrever ou não sobrescrever
Decida se os módulos de composição devem substituir métodos existentes. O exemplo acima usa if cls[k] == nil para evitar a substituição. Remova a verificação para permitir a substituição.
Vários módulos de composição
Aplique vários módulos de composição a uma classe para compor comportamentos de várias fontes.
local Printable = { print = function(self) print(tostring(self)) end }
local Comparable = { eq = function(self, other) return self.id == other.id end }
mixin(User, Serializable, Printable, Comparable)Definição de interface
Uma interface é uma tabela que lista os nomes dos métodos obrigatórios. Use-a para documentar o contrato que uma classe deve cumprir.
local IAnimal = {
"speak",
"move",
"eat",
}Função de verificação de interface
Verifique se uma classe implementa todos os métodos de uma interface.
local function implements(cls, interface)
for _, method in ipairs(interface) do
if type(cls[method]) ~= "function" then
return false, "Missing method: " .. method
end
end
return true
end
local ok, err = implements(Dog, IAnimal)
print(ok, err)Imposição rigorosa de interfaces
Chame implements no momento da definição da classe (ou do carregamento do módulo) para detectar métodos ausentes antecipadamente.
assert(implements(Dog, IAnimal))Tipagem por comportamento versus verificações de interface
Lua usa naturalmente a tipagem por comportamento (se o objeto tiver o método, use-o). Verificações explícitas de interface oferecem mais segurança para equipes grandes e APIs públicas.
Módulo de composição com estado
Em geral, os módulos de composição devem não ter estado (apenas métodos). Módulos de composição com estado podem causar conflitos se vários deles usarem os mesmos nomes de campos.
Aplicação ordenada de módulos de composição
Quando dois módulos de composição definem o mesmo método, o último aplicado prevalece. Controle a ordem deliberadamente para obter um comportamento previsível.
Decisão entre módulo de composição e herança
Use herança para relações fortes de «é um». Use módulos de composição para comportamentos reutilizáveis e transversais (registro, serialização, igualdade).
Pergunta sobre módulos de composição
Qual é uma vantagem importante dos módulos de composição em relação à herança?
Recapitulação: módulos de composição e interfaces
Os módulos de composição copiam métodos para dentro das classes a fim de fornecer comportamentos transversais. As interfaces documentam os métodos obrigatórios e podem ser verificadas no momento do carregamento. Juntos, eles permitem uma composição flexível além da herança única.
Perguntas Frequentes
A aula “Composição de mixins e verificações de interface” é grátis?
Sim — o texto completo de “Composição de mixins e verificações de interface” é 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 “Composição de mixins e verificações de interface”?
Combine várias tabelas de comportamento e valide a conformidade com a interface. 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 3 de 4.
Quanto tempo leva a aula “Composição de mixins e verificações de interface”?
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