<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Passagem de Parâmetros em Python</title>
	<atom:link href="http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/feed/" rel="self" type="application/rss+xml" />
	<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/</link>
	<description></description>
	<lastBuildDate>Fri, 25 Nov 2011 22:30:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<item>
		<title>By: Henrique</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-120567</link>
		<dc:creator>Henrique</dc:creator>
		<pubDate>Sat, 26 Sep 2009 22:05:57 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-120567</guid>
		<description>&lt;p&gt;Sobrecarga de métodos é uma muleta para as limitações da tipagem estática, onde você reescreve o mesmo método várias vezes para acomodar novos tipos. Em tipagem dinamica, aprenda a usar Duck Typying.&lt;/p&gt;

&lt;p&gt;def aceita&lt;em&gt;file&lt;/em&gt;like(stream):
    if hasattr(stream, &#039;write&#039;) and hasattr(stream, &#039;close&#039;):
       stream.write(&#039;Teste&#039;)
       return stream.close()
    else:
       raise ValueError&lt;/p&gt;

&lt;p&gt;Vai aceitar qualquer objeto File ou que implemente a mesma interface, e vai continuar funcionando para objetos de outros tipos que voce ainda nem conhecia quando implementou isso.&lt;/p&gt;

&lt;p&gt;E mais uma questao de aprender a pensar diferente com linguagens dinamicas.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Sobrecarga de métodos é uma muleta para as limitações da tipagem estática, onde você reescreve o mesmo método várias vezes para acomodar novos tipos. Em tipagem dinamica, aprenda a usar Duck Typying.</p>

<p>def aceita<em>file</em>like(stream):
    if hasattr(stream, &#8216;write&#8217;) and hasattr(stream, &#8216;close&#8217;):
       stream.write(&#8216;Teste&#8217;)
       return stream.close()
    else:
       raise ValueError</p>

<p>Vai aceitar qualquer objeto File ou que implemente a mesma interface, e vai continuar funcionando para objetos de outros tipos que voce ainda nem conhecia quando implementou isso.</p>

<p>E mais uma questao de aprender a pensar diferente com linguagens dinamicas.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-69668</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Mon, 01 Jun 2009 14:24:28 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-69668</guid>
		<description>&lt;p&gt;Bom, o próprio GvR considerou seriamente a possibilidade adicinar a declaração de tipos, de uma maneira opcional... isto diz muita coisa.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Bom, o próprio GvR considerou seriamente a possibilidade adicinar a declaração de tipos, de uma maneira opcional&#8230; isto diz muita coisa.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Tarantula</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-69444</link>
		<dc:creator>Tarantula</dc:creator>
		<pubDate>Mon, 01 Jun 2009 01:03:03 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-69444</guid>
		<description>&lt;p&gt;Trabalho com Python já há mais de 5 anos e nunca senti falta de tipagem estática.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Trabalho com Python já há mais de 5 anos e nunca senti falta de tipagem estática.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-67567</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Tue, 26 May 2009 22:49:23 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-67567</guid>
		<description>&lt;p&gt;E olha que interessante, GvR sugere o uso de decorators para criar automaticamente o código para as tais dispach tables que o Miguel citou:
&lt;blockquote&gt;
The overloaded decorator could build a multimethod dispatched based on the call signature. That&#039;s probably quicker than decoding the types by hand from a varargs argument...
&lt;/blockquote&gt;&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>E olha que interessante, GvR sugere o uso de decorators para criar automaticamente o código para as tais dispach tables que o Miguel citou:
<blockquote>
The overloaded decorator could build a multimethod dispatched based on the call signature. That&#8217;s probably quicker than decoding the types by hand from a varargs argument&#8230;
</blockquote></p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-67563</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Tue, 26 May 2009 22:40:18 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-67563</guid>
		<description>&lt;p&gt;O próprio Guido coloca de uma maneira bem honesta os prós, contras e desafios que ele encontrou imaginando esta alteração na linguagem: http://www.artima.com/weblogs/viewpost.jsp?thread=85551&lt;/p&gt;

&lt;p&gt;E já que que o artigo é de 2004, seria legal saber o que mudou na cabeça dele deste então.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>O próprio Guido coloca de uma maneira bem honesta os prós, contras e desafios que ele encontrou imaginando esta alteração na linguagem: <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=85551" rel="nofollow">http://www.artima.com/weblogs/viewpost.jsp?thread=85551</a></p>

<p>E já que que o artigo é de 2004, seria legal saber o que mudou na cabeça dele deste então.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-67557</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Tue, 26 May 2009 22:33:49 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-67557</guid>
		<description>&lt;p&gt;Uma opção menos radical seria o uso do http://pychecker.sourceforge.net/&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Uma opção menos radical seria o uso do <a href="http://pychecker.sourceforge.net/" rel="nofollow">http://pychecker.sourceforge.net/</a></p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-67470</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Tue, 26 May 2009 16:40:50 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-67470</guid>
		<description>&lt;p&gt;Tio, pára de reclamar:&lt;/p&gt;

&lt;p&gt;Quer Python com tipo declarado? &lt;a href=&quot;http://cobra-language.com/docs/python/&quot; rel=&quot;nofollow&quot;&gt;Então, toma&lt;/a&gt;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Tio, pára de reclamar:</p>

<p>Quer Python com tipo declarado? <a href="http://cobra-language.com/docs/python/" rel="nofollow">Então, toma</a>.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Thiago Bartolomei</title>
		<link>http://log4dev.com/2009/05/26/passagem-de-parametros-em-python/comment-page-1/#comment-67453</link>
		<dc:creator>Thiago Bartolomei</dc:creator>
		<pubDate>Tue, 26 May 2009 13:56:56 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=570#comment-67453</guid>
		<description>&lt;p&gt;Eu gosto de tipos. Eu programo a maioria do tempo em Java e quando programo em Ruby eu sinto falta, principalmente pra entender código alheio (ou antigo) ou, como você disse, quando quero sobrecarregar um método. O que acabo fazendo é um método com vários parâmetros opcionais, o que fica bem feio.&lt;/p&gt;

&lt;p&gt;Mas Java é um exagero. Cada vez que eu faco algo como:&lt;/p&gt;

&lt;pre&gt;String s = &quot;Uma String&quot;;&lt;/pre&gt;

&lt;p&gt;ou&lt;/p&gt;

&lt;pre&gt;List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();&lt;/pre&gt;

&lt;p&gt;&lt;br/&gt;
&lt;p&gt;eu me irrito profundamente. É óbvio que s é uma String. E pra que escrever 2 vezes &quot;Integer&quot;?&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;Está na minha lista de TODO aprender Scala. Pelo pouco que vi, eles tem tipagem estática como Java, mas o compilador tenta ao máximo inferir os tipos que você não escreve. Nesse caso, por exemplo, não precisaria avisar que s é uma String, e é óbvio que a ArrayList é de Integer, então imagino que você não precisaria escrever (não sei Scala, então não sei se type inference funciona com generics, mas eu acredito que sim). Quando por algum motivo o compilador não consegue inferir o tipo, ele reclama e pede pra você dar mais informações. &lt;/p&gt;

&lt;p&gt;Me parece ser um bom trade-off, pois o código fica mais limpo e ainda assim é totalmente tipado estaticamente.&lt;/p&gt;

&lt;p&gt;Outra linguagem interessante é aquela Duby, do mesmo cara que mantém o JRuby. A idéia é fazer uma linguagem com gosto de Ruby mas que seja eficiente na JVM (já que Ruby tem algumas features que fazem com que o bytecode gerado seja muito defensivo, atrapalhando a performance). Eles também tem type inference como Scala. Pena que não fizeram nenhuma release ainda...&lt;/p&gt;

&lt;p&gt;[]s
Bart&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;p&gt;Intro to Scala Type Inference&lt;/p&gt;

&lt;p&gt;http://www.scala-lang.org/node/127&lt;/p&gt;

&lt;p&gt;Duby Language&lt;/p&gt;

&lt;p&gt;http://kenai.com/projects/duby/pages/Home&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Eu gosto de tipos. Eu programo a maioria do tempo em Java e quando programo em Ruby eu sinto falta, principalmente pra entender código alheio (ou antigo) ou, como você disse, quando quero sobrecarregar um método. O que acabo fazendo é um método com vários parâmetros opcionais, o que fica bem feio.</p>

<p>Mas Java é um exagero. Cada vez que eu faco algo como:</p>

<pre>String s = "Uma String";</pre>

<p>ou</p>

<pre>List&#60;Integer&#62; list = new ArrayList&#60;Integer&#62;();</pre>

<p><br />
</p><p>eu me irrito profundamente. É óbvio que s é uma String. E pra que escrever 2 vezes &#8220;Integer&#8221;?</p>

<p>Está na minha lista de TODO aprender Scala. Pelo pouco que vi, eles tem tipagem estática como Java, mas o compilador tenta ao máximo inferir os tipos que você não escreve. Nesse caso, por exemplo, não precisaria avisar que s é uma String, e é óbvio que a ArrayList é de Integer, então imagino que você não precisaria escrever (não sei Scala, então não sei se type inference funciona com generics, mas eu acredito que sim). Quando por algum motivo o compilador não consegue inferir o tipo, ele reclama e pede pra você dar mais informações. </p>

<p>Me parece ser um bom trade-off, pois o código fica mais limpo e ainda assim é totalmente tipado estaticamente.</p>

<p>Outra linguagem interessante é aquela Duby, do mesmo cara que mantém o JRuby. A idéia é fazer uma linguagem com gosto de Ruby mas que seja eficiente na JVM (já que Ruby tem algumas features que fazem com que o bytecode gerado seja muito defensivo, atrapalhando a performance). Eles também tem type inference como Scala. Pena que não fizeram nenhuma release ainda&#8230;</p>

<p>[]s
Bart</p>

<p>Links:</p>

<p>Intro to Scala Type Inference</p>

<p><a href="http://www.scala-lang.org/node/127" rel="nofollow">http://www.scala-lang.org/node/127</a></p>

<p>Duby Language</p>

<p><a href="http://kenai.com/projects/duby/pages/Home" rel="nofollow">http://kenai.com/projects/duby/pages/Home</a></p>]]></content:encoded>
	</item>
</channel>
</rss>

