Saltar para o conteúdo

Duck typing

Origem: Wikipédia, a enciclopédia livre.

Em programação de computadores com linguagens de programação orientadas a objetos, duck typing (em português literal tipagem pato) é um estilo de tipagem em que os métodos e propriedades de um objeto determinam a semântica válida, em vez de sua herança de uma classe particular ou implementação de uma interface explicita.[1] O nome do conceito refere-se ao teste do pato, atribuído à James Whitcomb Riley (ver a história abaixo), que pode ser expressa como se segue:

Quando eu vejo um pássaro que caminha como um pato, nada como um pato e grasna como um pato, eu chamo aquele pássaro de pato.[2]

Exemplos do conceito

[editar | editar código-fonte]

Considere o seguinte pseudocódigo para uma linguagem com suporte duck typing:

função calcular(a, b, c) => retornar (a+b)*c
exemplo1 = calcular (1, 2, 3)
exemplo2 = calcular ([1, 2, 3], [4, 5, 6], 2)
exemplo3 = calcular ('maçãs ', 'e laranjas, ', 3)
imprimir para_string exemplo1
imprimir para_string exemplo2
imprimir para_string exemplo3

No exemplo, cada vez que a função calcular é chamada, objetos sem herança relacionada podem ser usados (números, listas e strings). Enquanto os objetos suportarem os métodos "+" e "*", a operação terá sucesso. Se traduzido para o Ruby ou Python, por exemplo, o resultado do código seria:

9
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
maçãs e laranjas, maçãs e laranjas, maçãs e laranjas,

Alex Martelli fez um uso precoce (2000) do termo em uma mensagem para o grupo de notícias comp.lang.python:

Em outras palavras, não verifique se ele É um pato: verifique se ele GRASNA como um pato, ANDA como um pato, etc, etc, dependendo exatamente de qual subconjunto de comportamento semelhante a um pato você precisa para jogar com seus jogos de linguagem.

Implementações

[editar | editar código-fonte]

Duck typing é muito usado em Python, com o exemplo canônico sendo classes semelhantes à arquivo (por exemplo, cStringIO permite que uma string Python seja tratada como um arquivo). De acordo com o princípio de EAFP, em vez de verificar para ver se algum objeto semelhante à Duck supostamente possui um método quack() (usando if hasattr(mallard, "quack"): ...) normalmente é preferível encapsular a tentativa de quack com uma manipulação de exceção apropriada:

try:
    mallard.quack()
except (AttributeError, TypeError):
    print("mallard can't quack()")

ou, um uso mais comum do princípio é apenas deixar a exceção "borbulhar", isto é, deixar a exceção ser lançada e deixar qualquer função ou método chamado do código em questão lidar com ela (ou se nenhum lida com ele, deixar a exceção ser lançada para o usuário). Isto dá um melhor feedback em uma saída ruim e evita o mascareamento de bugs.

Referências

  1. http://c2.com/cgi/wiki?DuckTyping
  2. Heim, Michael (2007). Exploring Indiana Highways. [S.l.]: Exploring America's Highway. 68 páginas. ISBN 978-0-9744358-3-1 
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy