Ruby · Essencial · Inglês · Técnico
duck typing
Estilo em que importa o objeto responder aos métodos chamados, não a sua classe. Se anda e grasna como um pato, serve como pato.
Onde usar
Em Ruby você raramente checa is_a?; confia que o objeto entende o método. Isso facilita testar com dublês, mas um objeto sem o método só falha em execução, com NoMethodError.
Em código
class Pato
def fala = 'quack'
end
class Robo
def fala = 'bip'
end
[Pato.new, Robo.new].each { |x| puts x.fala }Exemplos
We rely on duck typing, so any object with a call method works.
Contamos com duck typing, então qualquer objeto com o método call serve.
The test double only needs to quack like the real client.
O dublê de teste só precisa se comportar como o cliente real.
Cuidado
Não é ausência de tipos: o objeto continua tendo classe, só que o código não precisa consultá-la.
Origem
Vem do teste do pato: se anda como um pato e grasna como um pato, então é um pato.