Ruby · Intermediário · Inglês · Técnico
mixin
Módulo incluído numa classe para lhe dar métodos extras, sem herança. Em Ruby é o jeito de compartilhar comportamento entre classes sem relação, no lugar da herança múltipla.
Onde usar
Comparable e Enumerable são os exemplos clássicos: você implementa <=> ou each e ganha dezenas de métodos. Em design, prefira mixins pequenos e focados a hierarquias profundas.
Em código
module Falante
def fala = "#{self.class} fala"
end
class Gato
include Falante
end
puts Gato.new.fala # => Gato falaExemplos
We added a mixin so both classes can log the same way.
Adicionamos um mixin para as duas classes registrarem log do mesmo jeito.
Too many mixins make it hard to know where a method comes from.
Mixins demais dificultam saber de onde vem um método.
Cuidado
Não é um recurso separado da linguagem; é só um módulo usado via include, e abusar dele cria dependências implícitas difíceis de rastrear.
Origem
De mix in, misturar em: o comportamento é misturado à classe.