--
* Coding Dojo Rio *
dojo...@googlegroups.com
http://groups.google.com/group/dojo-rio
http://code.google.com/p/dojo-rio
http://dojorio.wordpress.com
2011/5/26 Rodolfo Carvalho <rhcar...@gmail.com>:
--
Salve Rodolfo!!!Grafia correta!! poucos acertam.
Li o post e achei show de bola!Deixei lá o meu comentario.
(Boo é Boo - O fato de eu utilizar e gostar de python me deixou bem bitolado).
Entendo a importância dos protocolos defindos com os "__whatever__". Não nego. Só acho que deveria existir algum açucar sintático para o "__init__". De qualquer forma, os equivalentes em Boo no post acima são, na verdade, definidos pelo próprio .NET.Em .NET, todo objeto tem pelo menos 4 métodos: Equals, GetHashCode, GetType e ToString. Eles são métodos usados pelo framework para diversas tarefas. Tirando isso, o resto é definido por operadores. O fato dos métodos se chamarem op_Add, op_Subtract, etc., é uma convenção do .NET e não das linguagens.
Em C# existe açucar para isso.operator +(Tipo a, Tipo b) { ... }
Quanto a protocolos próprios, ainda prefiro a elegância de interfaces para isso. Duck typing é mais uma ferramenta do que uma filosofia para quem é fã de tipagem estática.
In [1]: import math
In [2]: math.pi
Out[2]: 3.1415926535897931
In [3]: class Foo:
...: def __getitem__(self, item):
...: return math.pi
...:
In [4]: foo = Foo()
In [5]: foo["Quanto vale pi?"]
Out[5]: 3.1415926535897931
In [6]: foo["Qual seu número favorito?"]
Out[6]: 3.1415926535897931
In [7]: foo.__getitem__(42)
Out[7]: 3.1415926535897931