sexta-feira, 23 de maio de 2008

Duck Typing

Um conceito de programação bastante interessante é duck typing (tipagem do pato).

Estamos acostumados a considerar a tipagem quanto a sua rigidez e associação.

Quanto à rigidez, algumas linguagens são mais fortes, outras mais fracas. Quanto mais rígido o sistema de tipos, ou seja, mais tipos, menor flexibilidade de conversão, mais forte é a linguagem. Quanto menos rígido, mais fraca é.

Quanto a associação, o tipo pode estar associado à variável – tipagem estática – ou ao dado – tipagem dinâmica.

No entanto há outro tipo de classificação que não se encaixa bem em nenhum dos sistemas comuns, a duck typing – alguns assumem que duck typing é tipagem dinâmica, mas nem sempre se encaixa bem nessa classificação.

A lógica da duck typing é: «se nada como um pato, anda como um pato e grasna como um pato, deve ser um pato».

Dito de outra forma: se um determinado objeto é capaz de responder corretamente a um grupo específico de mensagens, ele pode ser considerado instância de uma classe hipotética que atenda a tais especificações.

Java se aproxima um pouco de duck typing com o uso de interfaces, porém de forma não tão dinâmica e eficiente quanto duck typing, pois a classe da qual o objeto foi instanciado precisa declarar explicitamente que implementa uma determinada interface.

Em duck typing basta poder responder às mensagens desejadas, não é preciso declarar a implementação da interface. A máquina virtual que executar a linguagem precisa saber – ou ser programada para – determinar em tempo de execução se um objeto atende às especificações de interface.

Geralmente se confunde duck typing com tipagem dinâmica pois é possível fazer duck typing com linguagens de tipagem dinâmica.

Tradicionalmente se usa duck typing em Smalltalk, Python – com o uso de assert –, Boo, Groovy e, mais recentemente, Io, apesar de Steve de Korte preferir o termo elephant typing, mas no fundo a diferença é ínfima.

Para quem quiser saber mais sobre duck typing, recomendo que leia o artigo elephant typing do Mergulhando no Caos, o artigo na Wikipédia, a página no Cunningham & Cunningham, Inc., a página do Boo, o Duck Typing Project para .NET, o artigo no Pythonologia e, claro, fazer a clássica busca no Google. =)

[]'s
Cacilhas, La Batalema
blog comments powered by Disqus