0Pricing
Lua Academy · Aula

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

  1. Design de classe-base e construtor
  2. Herança em vários níveis
  3. Composição de mixins e verificações de interface
  4. instanceof e introspecção de tipos
← Voltar para Lua Academy