<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Protótipo de Closures em Java está "feature-complete""]]></title>
		<link>http://www.guj.com.br/posts/list/17.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Protótipo de Closures em Java está "feature-complete""]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ <br /> Do blog de [url=http://gafter.blogspot.com/]Neal Gafter[/url]: <br /> <br /> I'm pleased to announce that the Java Closures prototype now supports all of the features of its specification!<br /> <br /> The complete source code, released under GPLv2, is in the project's openjdk repository. A binary build, suitable for use with an existing JDK6, is at http://www.javac.info/closures.tar.gz. Other related documents are on the website http://www.javac.info/.<br /> <br /> ------<br /> <br /> Mais informações em: http://gafter.blogspot.com/2008/08/java-closures-prototype-feature.html<br /> E para quem quiser conhecer um pouco mais da proposta de closures: http://www.parleys.com/display/PARLEYS/Home#talk=2097237;;slide=1<br /> <br /> Baixei o protótipo e brinquei um pouquinho...<br /> [code]<br /> public class HelloClosures1 {<br /> 	<br /> 	public static void main(String args[]) {<br /> 		{ int, int =&gt; int } soma = { int a, int b =&gt; a + b };<br /> 		System.out.println(soma.invoke(1,2));<br /> 	}<br /> 	<br /> }<br /> [/code]Saída: 3<br /> <br /> [code]<br /> import java.util.*;<br /> <br /> interface ListClosure&lt;E&gt; extends List&lt;E&gt; {<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block);<br /> }<br /> <br /> class ArrayListClosure&lt;E&gt; extends ArrayList&lt;E&gt; implements ListClosure&lt;E&gt; {<br /> 	<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block) {<br /> 		ListClosure&lt;E&gt; lista = new ArrayListClosure&lt;E&gt;();<br /> 		for (E elem : this) {<br /> 			if (block.invoke(elem)) {<br /> 				lista.add(elem);<br /> 			}<br /> 		}<br /> 		return lista;<br /> 	}<br /> 		<br /> }<br /> <br /> public class HelloClosure2 {<br /> 	<br /> 	public static void main(String args[]) {<br /> 		Integer[] numeros = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };<br /> 		ListClosure&lt;Integer&gt; lista = new ArrayListClosure&lt;Integer&gt;();<br /> 		lista.addAll(Arrays.asList(numeros));<br /> 		<br /> 		ListClosure&lt;Integer&gt; filtrada = lista.extract({ Integer a =&gt; a % 2 == 0 });<br /> 		System.out.println(filtrada);<br /> 	}<br /> 	<br /> }<br /> [/code]Saída: [0, 2, 4, 6, 8, 10]<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/535887.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/535887.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 14:59:03]]> GMT</pubDate>
				<author><![CDATA[ David]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Achei muito legal porque as closures ficaram tipadas....<br /> <br /> Se bem que em flex acaba ficando mais simples....<br /> <br /> [code]<br /> var soma:Function = function (a:int, b:int):int {<br /> return a + b;<br /> };<br /> soma(1, 2);<br /> [/code]<br /> <br /> Mas gostei... mesmo assim =D<br /> <br /> <br /> VELO]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536014.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536014.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 15:44:45]]> GMT</pubDate>
				<author><![CDATA[ velo]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ PO!<br /> <br /> Tentei rodar o primeiro exemplo e tomei um<br /> <br /> [code]Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/RestrictedFunction<br />         at java.lang.ClassLoader.defineClass1(Native Method)<br />         at java.lang.ClassLoader.defineClass(ClassLoader.java:638)<br />         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:143)<br />         at java.net.URLClassLoader.defineClass(URLClassLoader.java:281)<br />         at java.net.URLClassLoader.access$000(URLClassLoader.java:74)<br />         at java.net.URLClassLoader$1.run(URLClassLoader.java:216)<br />         at java.security.AccessController.doPrivileged(Native Method)<br />         at java.net.URLClassLoader.findClass(URLClassLoader.java:209)<br />         at java.lang.ClassLoader.loadClass(ClassLoader.java:324)<br />         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)<br />         at java.lang.ClassLoader.loadClass(ClassLoader.java:269)<br />         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337)<br /> Caused by: java.lang.ClassNotFoundException: java.lang.RestrictedFunction<br />         at java.net.URLClassLoader$1.run(URLClassLoader.java:221)<br />         at java.security.AccessController.doPrivileged(Native Method)<br />         at java.net.URLClassLoader.findClass(URLClassLoader.java:209)<br />         at java.lang.ClassLoader.loadClass(ClassLoader.java:324)<br />         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)<br />         at java.lang.ClassLoader.loadClass(ClassLoader.java:269)<br />         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337)<br />         ... 12 more<br /> Error: Could not find the main class.<br /> Error: A JNI error has occurred, please check your installation and try again[/code]<br /> <br /> Instalei o jdk7 no ubuntu via apt-get, alguem passou por isso ? :/]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536015.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536015.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 15:45:36]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ <br /> Tiago, use o javac e o java que vêm no arquivo disponibilizado pelo Neal Gafter.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536068.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536068.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 16:18:59]]> GMT</pubDate>
				<author><![CDATA[ David]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj]PO!<br /> <br /> Tentei rodar o primeiro exemplo e tomei um<br /> <br /> [code]Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/RestrictedFunction<br />        [/code]<br /> <br /> Instalei o jdk7 no ubuntu via apt-get, alguem passou por isso ? :/[/quote]<br /> <br /> Problema de classpath Tiago. Ele pegou o rt.jar do seu java antigo ja instalado, tinha de pegar do java "turbinado". usa o java que vem com ele, ou altera o bootclasspath do seu atual para passaer pelos jars do prototipo.<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536106.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536106.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 17:28:37]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Putz, rateei no mais obvio... consegui rodar o primeiro exemplo sim, muito legal!!!!<br /> <br /> Olha q codigo [i]divertido[/i] do primeiro exemplo!<br /> <br /> [code]$ javap A   <br /> Compiled from "A.java"<br /> public class A extends java.lang.Object{<br />     public static final A$2 +INSTANCE0;<br />     public A();<br />     public static void main(java.lang.String[]);<br />     static {};<br /> }<br /> <br /> $ javap A\$1<br /> Compiled from "A.java"<br /> final class A$1 extends java.lang.Object{<br />     javax.lang.function.III 1$soma;<br />     A$1();<br /> }<br /> <br /> $ javap A\$2<br /> Compiled from "A.java"<br /> final class A$2 extends java.lang.Object implements javax.lang.function.III{<br />     A$2();<br />     int +invoke(int, int);<br />     public final int invoke(int, int);<br /> }[/code]<br /> <br />  :shock: ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536114.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536114.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 17:44:58]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ A sintaxe para invocar é meio ruim, tem um ".invoke" supérfluo nisso.<br /> <br /> Fora que a performance quando o compilador introduz boxing por baixo dos panos deve ser terrível.<br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536121.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536121.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 17:54:53]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Declarar os tipos dos parâmetros de entrada duas vezes ( uma no cabeçalho da closure e outra no seu corpo ) é chato demais...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536143.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536143.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 19:47:21]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [b]Advanced Topics In Programming Languages: Closures For Java[/b]   [size=18] ; )[/size]<br /> <br /> [youtube]http://www.youtube.com/watch?v=0zVizaCOhME[/youtube]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536150.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536150.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 20:07:49]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=tnaires]Declarar os tipos dos parâmetros de entrada duas vezes ( uma no cabeçalho da closure e outra no seu corpo ) é chato demais...[/quote]<br /> <br /> Acho que será mais comum fazer algo desse  tipo:<br /> [code]        public static int doIt({ int, int =&gt; int } closure){                <br />              return closure.invoke(3,2);        <br />         }[/code]<br /> <br /> Ou isso:<br /> [code]int x = doIt( { int a, int b =&gt; a + b });[/code]<br /> <br /> Um pouco menos chato, concorda ?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536157.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536157.java</link>
				<pubDate><![CDATA[Fri, 8 Aug 2008 20:33:10]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj]Um pouco menos chato, concorda ?[/quote]<br /> Bem melhor ( só não entendi a necessidade de parênteses ao redor do bloco de código na segunda forma - acho que o chato aqui sou eu mesmo :P ).<br /> <br /> Eu tenho uma dúvida ( leia os comentários do código abaixo ):<br /> [code]class TesteClosure {<br />     public static void main(String args[]) {<br />         int five = 5;<br />         // Declarando a closure no estilo do peczenyj ( sem os parênteses )<br />         int x = fiveTimes { int a =&gt; a * five };<br />         // Isto aqui imprime 15<br />         System.out.println(fiveTimes.invoke(3));<br />         five = 10;<br />         // E isto aqui imprime quanto? 15 ou 30?<br />         System.out.println(fiveTimes.invoke(3));<br />     }<br /> }[/code]<br /> Se seguir o conceito de closures ( que mantém sempre o contexto original de sua declaração ), o segundo System.out.println deveria imprimir 15.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536230.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536230.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 09:14:37]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Eu não estava declarando uma closure na segunda forma e sim invocando-a através do método estático doIt declarado no primeiro, mas tenho que praticar mais.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536235.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536235.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 09:28:19]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj]Eu não estava declarando uma closure na segunda forma e sim invocando-a através do método estático doIt declarado no primeiro, mas tenho que praticar mais.[/quote]<br /> Ah sim, entendi.<br /> Confundi porque ficou muito semelhante com a forma que o David escreveu, mas sem a dupla declaração:<br /> [code]{ int, int =&gt; int } soma = { int a, int b =&gt; a + b };[/code]<br /> [code]int x = doIt( { int a, int b =&gt; a + b });[/code]<br /> Daí achei que doIt fosse o nome da closure.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536259.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536259.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 11:03:33]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj][quote=tnaires]Declarar os tipos dos parâmetros de entrada duas vezes ( uma no cabeçalho da closure e outra no seu corpo ) é chato demais...[/quote]<br /> <br /> Acho que será mais comum fazer algo desse  tipo:<br /> [code]        public static int doIt({ int, int =&gt; int } closure){                <br />              return closure.invoke(3,2);        <br />         }[/code]<br /> <br /> Ou isso:<br /> [code]int x = doIt( { int a, int b =&gt; a + b });[/code]<br /> <br /> Um pouco menos chato, concorda ?[/quote]<br /> <br /> Não se espantem mas já dá pra fazer isso em Delphi [b]há anos![/b]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536314.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536314.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 16:01:46]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=renato3110]Não se espantem mas já dá pra fazer isso em Delphi [b]há anos![/b][/quote]<br /> Realmente podemos ter um comportamento semelhante a closures em Delphi, conforme post abaixo:<br /> <a class="snap_shots" href="http://barrkel.blogspot.com/2006/08/delphi-closures-anonymous-delegates.html" target="_blank" rel="nofollow">http://barrkel.blogspot.com/2006/08/delphi-closures-anonymous-delegates.html</a><br /> Mas será que a suposta closure declarada mantém seu contexto original? Caso negativo, não são closures, e sim, ponteiros para blocos de código. Infelizmente tô sem o Delphi aqui pra fazer o teste.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536336.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536336.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 18:07:51]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Pela madrugada, java está se tornando uma linguagem extra-terrestre, daqui a pouco so os ETs vão entender isso.<br /> <br /> heheeheheh...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536339.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536339.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 18:46:27]]> GMT</pubDate>
				<author><![CDATA[ onolox]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote]<br /> [code]<br /> import java.util.*;<br /> <br /> interface ListClosure&lt;E&gt; extends List&lt;E&gt; {<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block);<br /> }<br /> <br /> class ArrayListClosure&lt;E&gt; extends ArrayList&lt;E&gt; implements ListClosure&lt;E&gt; {<br /> 	<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block) {<br /> 		ListClosure&lt;E&gt; lista = new ArrayListClosure&lt;E&gt;();<br /> 		for (E elem : this) {<br /> 			if (block.invoke(elem)) {<br /> 				lista.add(elem);<br /> 			}<br /> 		}<br /> 		return lista;<br /> 	}<br /> 		<br /> }<br /> <br /> public class HelloClosure2 {<br /> 	<br /> 	public static void main(String args[]) {<br /> 		Integer[] numeros = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };<br /> 		ListClosure&lt;Integer&gt; lista = new ArrayListClosure&lt;Integer&gt;();<br /> 		lista.addAll(Arrays.asList(numeros));<br /> 		<br /> 		ListClosure&lt;Integer&gt; filtrada = lista.extract({ Integer a =&gt; a % 2 == 0 });<br /> 		System.out.println(filtrada);<br /> 	}<br /> 	<br /> }<br /> [/code]Saída: [0, 2, 4, 6, 8, 10][/quote]<br /> <br /> Mesmo programa escrito em Scheme:<br /> <br /> [code]<br /> (define extrai<br />   (filter (lambda (numero) (even? numero))<br />     '(0 1 2 3 4 5 6 7 8 9 10)))<br /> [/code]<br /> <br /> Saida: (0 2 4 6 8 10)<br /> <br />  :shock: <br /> <br /> E em Python, alguem ai?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536343.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536343.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 19:08:17]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Imaginem poder enviar blocos de código à uma List ou Comparable, ficando cada vez mais parecido com Ruby.<br /> <br /> To curioso pra ver como serão os Extension Methods, ficaria show de bola:<br /> <br /> [code]class EnhancedInteger {<br />     static boolean greaterThanAll(Integer self, Object[] others) {<br />         greaterThanAll(self, others)<br />     }<br />     static boolean greaterThanAll(Integer self, others) {<br />         others.every{ self &gt; it }<br />     }<br /> }<br /> <br /> use(EnhancedInteger) {<br />     assert 4.greaterThanAll(1, 2, 3)<br />     assert !5.greaterThanAll(2, 4, 6)<br />     assert 5.greaterThanAll(-4..4)<br />     assert 5.greaterThanAll([])<br />     assert !5.greaterThanAll([4, 5])<br /> }[/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536350.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536350.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 19:38:53]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Sinto cheiro de migração da galera pra outra sintaxe, mas a JVM é eterna. Concordam?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536363.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536363.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 20:35:34]]> GMT</pubDate>
				<author><![CDATA[ **Popeye12345**]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=cmoscoso][quote]<br /> [code]<br /> import java.util.*;<br /> <br /> interface ListClosure&lt;E&gt; extends List&lt;E&gt; {<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block);<br /> }<br /> <br /> class ArrayListClosure&lt;E&gt; extends ArrayList&lt;E&gt; implements ListClosure&lt;E&gt; {<br /> 	<br /> 	public ListClosure&lt;E&gt; extract({ E =&gt; boolean } block) {<br /> 		ListClosure&lt;E&gt; lista = new ArrayListClosure&lt;E&gt;();<br /> 		for (E elem : this) {<br /> 			if (block.invoke(elem)) {<br /> 				lista.add(elem);<br /> 			}<br /> 		}<br /> 		return lista;<br /> 	}<br /> 		<br /> }<br /> <br /> public class HelloClosure2 {<br /> 	<br /> 	public static void main(String args[]) {<br /> 		Integer[] numeros = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };<br /> 		ListClosure&lt;Integer&gt; lista = new ArrayListClosure&lt;Integer&gt;();<br /> 		lista.addAll(Arrays.asList(numeros));<br /> 		<br /> 		ListClosure&lt;Integer&gt; filtrada = lista.extract({ Integer a =&gt; a % 2 == 0 });<br /> 		System.out.println(filtrada);<br /> 	}<br /> 	<br /> }<br /> [/code]Saída: [0, 2, 4, 6, 8, 10][/quote]<br /> <br /> Mesmo programa escrito em Scheme:<br /> <br /> [code]<br /> (define extrai<br />   (filter (lambda (numero) (even? numero))<br />     '(0 1 2 3 4 5 6 7 8 9 10)))<br /> [/code]<br /> <br /> Saida: (0 2 4 6 8 10)<br /> <br />  :shock: <br /> <br /> E em Python, alguem ai?[/quote]<br /> <br /> Em Python, não sei. Mas em Ruby, fica assim:<br /> <br /> [code]<br /> lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]<br /> puts lista.select {|a| a % 2 == 0}<br /> [/code]<br /> <br /> Apesar que eu acho que você foi injusto com Java, pois boa parte do seu código é para adicionar um método em ArrayList&lt;E&gt;. Na prática, quando Closure for real, novos métodos serão (ou deveriam ser) adicionados nas coleções, e ninguém fará isso à mão.<br /> <br /> Portanto, para comparação, vou considerar no código Java apenas a classe com método estático main.<br /> Fica assim:<br /> <br /> Java (com closure) -&gt; 9 linhas<br /> Scheme -&gt; 3 linhas<br /> Ruby -&gt; 2 linhas<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536374.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536374.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 21:22:45]]> GMT</pubDate>
				<author><![CDATA[ Leonardo3001]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Mais um, em Javascript (copie todo o código, jogue num html e veja no browser):<br /> <br /> [code]<br /> &lt;script type="text/javascript"&gt;<br /> 	var lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];<br /> <br /> 	Array.prototype.select = function(selectorFunction) {<br /> 		var result = [];<br /> <br /> 		for (var i = 0; i &lt; this.length; i++) {<br /> 			if (typeof selectorFunction == "function" && selectorFunction(this[i])) {<br /> 				result.push(this[i]);<br /> 			}<br /> 		}<br /> 		return result;<br /> 	}<br /> <br /> 	document.write(lista.select(function(e) {return e % 2 == 0}));<br /> &lt;/script&gt;<br /> [/code]<br /> <br /> Porém, Javascript não tem suporte nativo para filtragem em Array, mas tem closure! Por isso, tive que adicionar um método select no Array.<br /> Fica assim:<br /> <br /> Java com closure -&gt; 24 linhas<br /> Javascript -&gt; 11 linhas<br /> Java com closure (apelando pra não considerar customização de ArrayList) -&gt; 9 linhas<br /> Scheme -&gt; 3 linhas<br /> Ruby -&gt; 2 linhas <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536380.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536380.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 22:01:13]]> GMT</pubDate>
				<author><![CDATA[ Leonardo3001]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ "]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536381.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536381.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 22:53:04]]> GMT</pubDate>
				<author><![CDATA[ marcosalex]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=marcosalex]A impressão que tenho é que a linguagem Java vem tendo cada vez mais maneiras de se fazer a mesma coisa, tornando-se complexa demais. Acho que no lugar disso, seria melhor eles trabalhassem em APIs, Frameworks e em IDEs produtivas. Bom, opiniao minha.[/quote]<br /> <br /> Acho melhor ter uma linguagem que tem várias maneiras de fazer coisas semelhantes de modo elegante do que ter uma linguagem que tenta fazer isso de modo deselegante. Ficou feinho e burocrático utilizar closures em java, e espero que o uso disso não seja abusado no futuro.<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536389.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536389.java</link>
				<pubDate><![CDATA[Sat, 9 Aug 2008 23:32:19]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Poderíamos migrar todos pra Scala e sermos felizes para sempre <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536393.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536393.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:03:44]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Toda vida que um recurso novo é adicionado a linguagem, a história se repete. Na época de Generics, muita gente torceu o nariz e no final todos viram que é bom.<br /> Às vezes acho a comunidade mais exigente que o necessário, [b]minha opinião[/b]. Vejo linguagens como C# agregarem muitos recursos durante sua evolução, e em Java é a maior ladainha pra colocar algo novo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536394.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536394.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:10:12]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Porque em vez de ficar fazendo [b]remendos[/b] eles não criam algo novo do zero?  <img src="http://www.guj.com.br/images/smilies/136dd33cba83140c7ce38db096d05aed.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536396.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536396.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:20:36]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=tnaires]Toda vida que um recurso novo é adicionado a linguagem, a história se repete. Na época de Generics, muita gente torceu o nariz e no final todos viram que é bom.<br /> Às vezes acho a comunidade mais exigente que o necessário, [b]minha opinião[/b]. Vejo linguagens como C# agregarem muitos recursos durante sua evolução, e em Java é a maior ladainha pra colocar algo novo.[/quote]<br /> <br /> Todos quem cara-pálida?<br /> <br /> A implementação de generics em java é sebosa e não existe informação nenhuma sobre os genéricos em tempo de execução, obrigando a construção de gambiarras (como passar o Class&lt;T&gt; quando você já passou T em algum lugar, não haver T[]). Uma feature que adiciona um absurdo de complexidade acidental, sem adicionar quase nada em funcionalidades. E a falta de type-inference faz o código generico ser desnecessariamente feio.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536397.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536397.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:26:57]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ E espero que na nova versão eles não façam mais a gente ficar passando Class&lt;T&gt;.<br /> <br /> Mas a minha mensagem você entendeu. Eu só devia ter sido mais cuidadoso e ter falado "quase todos". <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> [EDITADO]<br /> Então reescrevendo:<br /> Na época de Generics, muita gente torceu o nariz e no final quase todos viram que foi melhor. <br /> [/EDITADO]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536398.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536398.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:28:57]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ O remendo é melhor que nada, mas não é o melhor.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536399.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536399.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:34:39]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Bom, pra mim o que interessa é que agora a consistência das minhas coleções pode ser verificada em tempo de compilação, além de não ter que ficar fazendo casts o tempo todo.<br /> Mas veja só, eu falando que a comunidade é exigente, nem tinha reparado que há uns posts atrás nesse tópico eu tava reclamando da sintaxe de closures também <img src="http://www.guj.com.br/images/smilies/499fd50bc713bfcdf2ab5a23c00c2d62.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536400.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536400.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 00:37:15]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=tnaires]Bom, pra mim o que interessa é que agora a consistência das minhas coleções pode ser verificada em tempo de compilação, além de não ter que ficar fazendo casts o tempo todo.<br /> Mas veja só, eu falando que a comunidade é exigente, nem tinha reparado que há uns posts atrás nesse tópico eu tava reclamando da sintaxe de closures também <img src="http://www.guj.com.br/images/smilies/499fd50bc713bfcdf2ab5a23c00c2d62.gif" border="0"> [/quote]<br /> <br /> O cast está lá, só que agora ele se esconde atrás de um &lt;String&gt; e mesmo com código "genérico" é possível causar ClassCastExceptions, simplesmente porque a implementação de genericos não existe, é uma coisa que está na imaginação dos programadores Java <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"><br /> <br /> Todas as propostas de reificação que eu vi em java quebram a compatibilidade por completo do código genérico atual e eu duvido muito que eles tenham interesse em fazer isso. Eles deveriam fazer igual a MicOsoft, admitir que a implementação é chula e escrever tudo denovo. Ou esquecer Java e começar a dar mais valor a outras linguagens da JVM, como Scala.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536438.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536438.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 11:29:34]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Do jeito que a coisa tá indo com o Java, só um pensamento vem a minha cabeça:<br /> <br /> "Eu não sei com que IDEs o Java 8 será programado, mas o Java 9 será com paus e pedras."]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536460.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536460.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 14:00:49]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Olá senhores,<br /> <br /> Este recurso me lembra a execução de blocos de código que existe/existiam em clipper vrs. 5.x<br /> <br /> Evidencia 1<br /> [code]CLS<br />    ? EVAL( { | nVar | nVar * nVar }, 6 )<br /> [/code]<br /> <br /> Evidencia 2<br /> [code]aVar := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }<br />    bDouble := { | nVal | QOUT( TRANSFORM( ( nVal * 2 ), "@B 999")) }<br />    AEVAL( aVar, bDouble )[/code]<br /> <br /> Evidencia 3<br /> [code]A := {'GARY HALL', 'FRED SMITH', 'TIM JONES'}<br /> B := { | X, Y |  X &gt; Y }<br />     asort(A, B)[/code]<br /> <br /> Vou parar com as evidencias de utilização em clipper porque simples as formas de uso de blocos de códigos nesta linguagem deve beirar uma centena.<br /> <br /> Me parece que na linguagem Ruby tem algo semelhante:<br /> [code]array = [1, 'hi', 3.14]<br /> array.each { |item| puts item }[/code]<br /> <br /> Pois bem, este recurso já existe fazem uns 15 ou 16 anos  :shock: <br /> <br /> Causou grande repercussão na linguagem clipper na época, pelo fato dela ser procedural e este recurso permitir a construção de algoritimos mais "sofisticados" e aumentando bastante o poder das estruturas dinamicas da linguagem.<br /> <br /> O problema é que fazer a manutenção em algoritimos construidos com este recurso do tipo "sedutor" era dramático, porque o desenvolvedor geralmente aplicava isto como solução para tudo. Posso estar errado (e quero estar) mas muitos vão esquecer da OOP e aplicar isto na primeira dificuldade que aparecer.<br /> <br /> Talvez este recurso se encaixe bem em linguagens como Ruby porque as propostas estão (IMO) bastante relacionadas, mas isto não diminui os possíveis problemas que podem ser causados por ele.<br /> <br /> <br /> P.S. Com certeza isso irá fazer com que novos livros ou capitulos de livros sobre melhores práticas sejam editados enchendo ainda mais os bolsos de alguns.<br /> <br /> <br /> flw]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536463.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536463.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 14:26:44]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=renato3110]Porque em vez de ficar fazendo [b]remendos[/b] eles não criam algo novo do zero?  <img src="http://www.guj.com.br/images/smilies/136dd33cba83140c7ce38db096d05aed.gif" border="0"> [/quote]<br /> <br /> E o que já está implementado? Fica pra lá?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536467.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536467.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 14:32:02]]> GMT</pubDate>
				<author><![CDATA[ **Popeye12345**]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Não, faz a mesma coisa que um espremedor com a laranja]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536496.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536496.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 19:32:16]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=fantomas]Olá senhores,<br /> <br /> Este recurso me lembra a execução de blocos de código que existe/existiam em clipper vrs. 5.x<br /> <br /> Evidencia 1<br /> [code]CLS<br />    ? EVAL( { | nVar | nVar * nVar }, 6 )<br /> [/code]<br /> <br /> Evidencia 2<br /> [code]aVar := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }<br />    bDouble := { | nVal | QOUT( TRANSFORM( ( nVal * 2 ), "@B 999")) }<br />    AEVAL( aVar, bDouble )[/code]<br /> <br /> Evidencia 3<br /> [code]A := {'GARY HALL', 'FRED SMITH', 'TIM JONES'}<br /> B := { | X, Y |  X &gt; Y }<br />     asort(A, B)[/code]<br /> <br /> Vou parar com as evidencias de utilização em clipper porque simples as formas de uso de blocos de códigos nesta linguagem deve beirar uma centena.<br /> <br /> Me parece que na linguagem Ruby tem algo semelhante:<br /> [code]array = [1, 'hi', 3.14]<br /> array.each { |item| puts item }[/code]<br /> <br /> Pois bem, este recurso já existe fazem uns 15 ou 16 anos  :shock: <br /> <br /> Causou grande repercussão na linguagem clipper na época, pelo fato dela ser procedural e este recurso permitir a construção de algoritimos mais "sofisticados" e aumentando bastante o poder das estruturas dinamicas da linguagem.<br /> <br /> O problema é que fazer a manutenção em algoritimos construidos com este recurso do tipo "sedutor" era dramático, porque o desenvolvedor geralmente aplicava isto como solução para tudo. Posso estar errado (e quero estar) mas muitos vão esquecer da OOP e aplicar isto na primeira dificuldade que aparecer.<br /> <br /> Talvez este recurso se encaixe bem em linguagens como Ruby porque as propostas estão (IMO) bastante relacionadas, mas isto não diminui os possíveis problemas que podem ser causados por ele.<br /> <br /> <br /> P.S. Com certeza isso irá fazer com que novos livros ou capitulos de livros sobre melhores práticas sejam editados enchendo ainda mais os bolsos de alguns.<br /> <br /> <br /> flw[/quote]<br /> <br /> Closure não é somente passagem de função de um lugar para outro! Uma função com suporte a closure captura o contexto onde foi criado. Coisa que em linguagens procedurais não acontecia (como: VB, Clipper, C) por uma razão simples: só haviam dois contextos, o local (dentro da função) e o global. E os dois eram sempre acessados onde quer que a função fosse executada.<br /> <br /> Em linguagem OO, existe também o contexto do objeto. E com isso, não basta criar uma função e executá-lo por aí, é necessário que esta tenha a referência do objeto que a criou. Essa obtenção de referência, é o closure!<br /> <br /> Veja mais em http://pt.wikipedia.org/wiki/Closure .]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536497.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536497.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 19:35:27]]> GMT</pubDate>
				<author><![CDATA[ Leonardo3001]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Maurício Linhares]<br /> A implementação de generics em java é sebosa e não existe informação nenhuma sobre os genéricos em tempo de execução, obrigando a construção de gambiarras (como passar o Class&lt;T&gt; quando você já passou T em algum lugar, [b]não haver T[][/b]). Uma feature que adiciona um absurdo de complexidade acidental, sem adicionar quase nada em funcionalidades. E a falta de type-inference faz o código generico ser desnecessariamente feio.[/quote]<br /> <br /> O motivo para não haver T[] é que arrays no java são covariant:<br /> <br /> [code]Object[] numbers = new Long[1];<br /> numbers[0] = "ops..."; //vai ter problemas em tempo de execução...![/code]<br /> <br /> Para resolver esse problema use LIST, pois é invariant (só aceita mesmo tipo) e se haver algo errado nem deixa compilar.<br /> <br /> Ou seja, isso pelo menos garante mais qualidade pro código. Eu não sei como conseguem implementar em outras linguagens estáticas o T[], a não ser que as arrays desde o começo fossem invriants, pq do contrário é improvável que admitam covariants em generics.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536500.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536500.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 20:23:34]]> GMT</pubDate>
				<author><![CDATA[ bobmoe]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=cmoscoso]E em Python, alguem ai?[/quote]<br /> <br /> Hmmm...<br /> <br /> [code]filter(lambda x: x % 2 == 0, [0,1,2,3,4,5,6,7,8,9,10])[/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536509.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536509.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 21:15:34]]> GMT</pubDate>
				<author><![CDATA[ dango]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[  [quote=renato3110]Closure não é somente passagem de função de um lugar para outro! Uma função com suporte a closure captura o contexto onde foi criado. Coisa que em linguagens procedurais não acontecia (como: VB, Clipper, C) por uma razão simples: só haviam dois contextos, o local (dentro da função) e o global. E os dois eram sempre acessados onde quer que a função fosse executada.<br /> <br /> Em linguagem OO, existe também o contexto do objeto. E com isso, não basta criar uma função e executá-lo por aí, é necessário que esta tenha a referência do objeto que a criou. Essa obtenção de referência, é o closure!<br /> <br /> Veja mais em <a class="snap_shots" href="http://pt.wikipedia.org/wiki/Closure" target="_blank" rel="nofollow">http://pt.wikipedia.org/wiki/Closure</a> .[/quote]<br /> <br /> Valeu pelo esclarecimento...<br /> <br /> Só quiz deixar claro que:<br /> <br /> a) A idéia na minha opinião não é nova, como disse ela dever ter uns 15 anos e provavelmente o Turbo Pascal também já tinha coisa parecida (e melhor) 4 ou 5 anos antes disso, ou seja, 20 anos se não for mais rsrsrsrs.<br /> <br /> b) Pelo fato do clipper ser procedural e java ser orientado a objetos e +15 anos terem se passado desde quando a ideia apareceu é claro que alguma coisa diferente tinha que ter.<br /> <br /> c) Os códigos feitos com code blocks se transformaram em um inferno em termos de manutenção e conceito, e com os "closures", na minha opinião, não será diferente. Diria que será pior porque além dos BOLOVO teremos os closures para atormentar ainda mais  <img src="http://www.guj.com.br/images/smilies/9d71f0541cff0a302a0309c5079e8dee.gif" border="0"> .<br /> <br /> []'s<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536511.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536511.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 21:30:58]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Mas não fui eu quem disse aquilo <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536516.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536516.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 22:10:00]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Ops! Foi mal  <img src="http://www.guj.com.br/images/smilies/499fd50bc713bfcdf2ab5a23c00c2d62.gif" border="0"> ....me desculpe, foi o [b]Leonardo3001[/b].<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536523.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536523.java</link>
				<pubDate><![CDATA[Sun, 10 Aug 2008 22:44:18]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Não sei se é um pouco precoce perguntar isto agora, mas e o groovy como fica? Pois dentre outras coisas ele tb possui closures. Será que estas funcionalidades "dinâmicas" na jdk vão matar o groovy?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536569.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536569.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 07:52:27]]> GMT</pubDate>
				<author><![CDATA[ fausto]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=fausto]Não sei se é um pouco precoce perguntar isto agora, mas e o groovy como fica? Pois dentre outras coisas ele tb possui closures. Será que estas funcionalidades "dinâmicas" na jdk vão matar o groovy?[/quote]<br /> <br /> O Groovy fica no canto dele, sem nada a ver com a história. Nada muda.<br /> <br /> Talvez melhorem o suporte e o conjunto de instruções da JVM, e com isso a performance de qualquer linguagem dinâmica na plataforma, mas só isso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536599.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536599.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 08:29:10]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [milésima mensagem. <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"> ]<br /> <br /> Bem, desde a primeira vez que vi closures em java achei a sintaxe feia, confusa e cheia de pegadinhas e regras estranhas por debaixo dos panos (algo inerente da condição de ser uma feature tardia que obrigatoriamente teve que ser implementada com gambiarras na linguagem para não violar o backwards-compatible, [i]a la[/i] generics).<br /> <br /> Mas realmente, eu vi uma tendência de que closures virou modinha e tem muita gente tentando [i]rubynizar[/i] o java usando closures só porque acha bonito, sem haver necessidade.<br /> <br /> Há também um grande perigo na manutenção. Gambiarrizadores que produzem toneladas de código de péssima qualidade têm dificuldades com generics porque usá-los em lugar inadequado quase sempre resulta em erro de compilação, warning ou ClassCastException. Mas com closures é diferente: é possível utilizá-lo para fazer um goto dinâmico e destruir a manutenibilidade do código.<br /> <br /> Ou seja, é um recurso poderoso e muito útil, mas também perigoso. Não deve ser usado a torto e a direito, senão vai trazer mais problemas do que resolver.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536637.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536637.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 09:00:59]]> GMT</pubDate>
				<author><![CDATA[ victorwss]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Isso eu achei interessante:<br /> <br /> [code]public class A {<br />         public static void main(String args[]) {<br />             @Shared int x = 0;<br /> <br />             {int, int =&gt; int } xxx  = { int a, int b =&gt;  x += a + b ; x};<br /> <br />             System.out.println(xxx.invoke(3,4));<br />             System.out.println(xxx.invoke(2,4));<br /> <br />         }<br /> }[/code]<br /> <br /> Sem o @Shared eu recebo um warning, nada mais do que justo!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536652.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536652.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 09:25:15]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[  <img src="http://www.guj.com.br/images/smilies/499fd50bc713bfcdf2ab5a23c00c2d62.gif" border="0"> ainda vou entender com mais carinho as closures, ainda não entendi um uso no meu dia a dia.<br /> <br /> Vendo o Mauricio com essa foto malvada ai acho que vou ver o Scala que só ouvir falar rsss <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> eu não paro de estudar desde os meus 16 anos e to com 30 rsss, já foi tantas linguagens.<br /> <br />  <img src="http://www.guj.com.br/images/smilies/2786c5c8e1a8be796fb2f726cca5a0fe.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536692.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536692.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:15:32]]> GMT</pubDate>
				<author><![CDATA[ rufostec]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ hum... ja ate sei do que as proximas edições da javamagazine e mundojava iram falar...<br /> <br /> <br /> <br /> <br /> po deveriam colocar ponteiros na linguagem.... sinto falta dos ponteiros...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536694.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536694.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:19:19]]> GMT</pubDate>
				<author><![CDATA[ luistiagos]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=luistiagos]<br /> po deveriam colocar ponteiros na linguagem.... sinto falta dos ponteiros...[/quote]<br /> <br /> Curiosidade: Que falta eles te fazem no dia a dia ?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536717.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536717.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:38:58]]> GMT</pubDate>
				<author><![CDATA[ Ssalgado]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Ssalgado][quote=luistiagos]<br /> po deveriam colocar ponteiros na linguagem.... sinto falta dos ponteiros...[/quote]<br /> <br /> Curiosidade: Que falta eles te fazem no dia a dia ?[/quote]<br /> <br /> Acho que ele estava sendo irônico.  <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536723.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536723.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:46:04]]> GMT</pubDate>
				<author><![CDATA[ victorwss]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ É....também achei isso curioso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536724.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536724.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:47:43]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=victorwss][quote=Ssalgado][quote=luistiagos]<br /> po deveriam colocar ponteiros na linguagem.... sinto falta dos ponteiros...[/quote]<br /> <br /> Curiosidade: Que falta eles te fazem no dia a dia ?[/quote]<br /> <br /> Acho que ele estava sendo irônico.  <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> [/quote]<br /> <br /> Se sim, foi mal. hehe<br /> <br /> Se não, ainda estou curioso.  <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536728.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536728.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 10:51:39]]> GMT</pubDate>
				<author><![CDATA[ Ssalgado]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Alguém pra falar de ponteiros em Java só pode estar sendo irônico mesmo. rs]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536760.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536760.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 11:23:49]]> GMT</pubDate>
				<author><![CDATA[ **Popeye12345**]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Uma coisa que seria interessante em closures é se eu pudesse fazer currying também. <br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> [code]<br /> #include &lt;boost/asio.hpp&gt;<br /> ...<br /> <br /> boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), <br />     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> [/code]<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536778.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536778.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 11:55:26]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol] Uma coisa que seria interessante em closures é se eu pudesse fazer currying também.<br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> view plaincopy to clipboardprint?<br /> <br />    1. #include &lt;boost/asio.hpp&gt;  <br />    2. ...  <br />    3.   <br />    4. boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes),   <br />    5.     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));  <br /> <br /> #include &lt;boost/asio.hpp&gt; ... boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred. [/quote]<br /> <br /> ????? <img src="http://www.guj.com.br/images/smilies/385970365b8ed7503b4294502a458efa.gif" border="0"> ??????]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536896.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536896.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 13:41:26]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=fantomas][quote=thingol] Uma coisa que seria interessante em closures é se eu pudesse fazer currying também.<br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> view plaincopy to clipboardprint?<br /> <br />    1. #include &lt;boost/asio.hpp&gt;  <br />    2. ...  <br />    3.   <br />    4. boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes),   <br />    5.     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));  <br /> <br /> #include &lt;boost/asio.hpp&gt; ... boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred. [/quote]<br /> <br /> ????? <img src="http://www.guj.com.br/images/smilies/385970365b8ed7503b4294502a458efa.gif" border="0"> ??????[/quote]<br /> <br /> Tambem não entendi bulhufas. Mas sei que é porque ainda não estamos no nivel Yoda, somos padawans ainda. Quero virar Jedi até o fim do ano, mas Yoda... rs... Tá dificil! ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536899.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536899.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 13:42:53]]> GMT</pubDate>
				<author><![CDATA[ **Popeye12345**]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ No aguardo de um post elucidativo e didático. <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/536932.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/536932.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 14:00:19]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Sergio Figueras][quote=fantomas][quote=thingol] Uma coisa que seria interessante em closures é se eu pudesse fazer currying também.<br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> view plaincopy to clipboardprint?<br /> <br />    1. #include &lt;boost/asio.hpp&gt;  <br />    2. ...  <br />    3.   <br />    4. boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes),   <br />    5.     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));  <br /> <br /> #include &lt;boost/asio.hpp&gt; ... boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred. [/quote]<br /> <br /> ????? <img src="http://www.guj.com.br/images/smilies/385970365b8ed7503b4294502a458efa.gif" border="0"> ??????[/quote]<br /> <br /> Tambem não entendi bulhufas. Mas sei que é porque ainda não estamos no nivel Yoda, somos padawans ainda. Quero virar Jedi até o fim do ano, mas Yoda... rs... Tá dificil! [/quote]<br /> <br /> Me senti um merda agora......]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537030.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537030.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 15:15:24]]> GMT</pubDate>
				<author><![CDATA[ TangZero]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj]Isso eu achei interessante:<br /> <br /> [code]public class A {<br />         public static void main(String args[]) {<br />             @Shared int x = 0; <br /> <br />             {int, int =&gt; int } xxx  = { int a, int b =&gt;  x += a + b ; x};<br /> <br />             System.out.println(xxx.invoke(3,4));<br />             System.out.println(xxx.invoke(2,4));<br /> <br />         }<br /> }[/code]<br /> <br /> Sem o @Shared eu recebo um warning, nada mais do que justo![/quote]<br /> <br /> Deveria ser o contrário, com o @Shared: Warning: too many gambiarras]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537078.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537078.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 15:51:20]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=renato3110][quote=peczenyj]Isso eu achei interessante:<br /> <br /> [code]public class A {<br />         public static void main(String args[]) {<br />             @Shared int x = 0; <br /> <br />             {int, int =&gt; int } xxx  = { int a, int b =&gt;  x += a + b ; x};<br /> <br />             System.out.println(xxx.invoke(3,4));<br />             System.out.println(xxx.invoke(2,4));<br /> <br />         }<br /> }[/code]<br /> <br /> Sem o @Shared eu recebo um warning, nada mais do que justo![/quote]<br /> <br /> Deveria ser o contrário, com o @Shared: Warning: too much gambiarras[/quote]<br /> <br /> O Shared é uma gambiarra para permitir que o closure altere o valor da variável local.<br /> <br /> CHUTE: ACHO que isso pode ser implementado pelo compilador criando um objeto oculto no método, transformando a variável local em um atributo deste objeto oculto e fazendo tanto o método quanto o closure usar este atributo. Quando o método termina, o objeto contendo o atributo ainda existe no heap, até que o coletor de lixo o descarte.<br /> <br /> Quando a variável é final, sem problemas. O compilador faz o mesmo que ele faz atualmente com classes anônimas. Mas quando não é, essa manobra do compilador resolve o problema.<br /> <br /> Aliás, isso não serve apenas para closures. Pode ser usado para classes anônimas também, resolvendo o problema do "annoying final".<br /> <br /> Daí, aquele erro de compilação de que a variável local deveria ser final se reduziria a uma warning (porque provavelmente o compilador fará algo que faz com que a variável local deixe de ser de fato apenas uma variável local). Daí o @Shared funciona mais ou menos como um @SuppressWarnings para isso.<br /> <br /> Edit: BTW closures são reduzidos pelo compilador em classes anônimas que posteriormente são reduzidas a classes internas e por fim a classes normais com visibilidade de pacote.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537119.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537119.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 16:33:10]]> GMT</pubDate>
				<author><![CDATA[ victorwss]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol]Uma coisa que seria interessante em closures é se eu pudesse fazer currying também. <br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> [code]<br /> #include &lt;boost/asio.hpp&gt;<br /> ...<br /> <br /> boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), <br />     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> [/code]<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred.<br /> [/quote]<br /> Isso é currying de função ou pré-configuração do objeto?<br /> <br /> Currying em Java só no dia que tivermos objetos-Função/Bloco]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537201.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537201.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 19:12:16]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Bruno Laturner]Isso é currying de função ou pré-configuração do objeto?<br /> <br /> Currying em Java só no dia que tivermos objetos-Função/Bloco[/quote]<br /> <br /> Traduzindo, quando Java tiver Closures :)]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537202.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537202.java</link>
				<pubDate><![CDATA[Mon, 11 Aug 2008 19:14:04]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [code]public class X {<br />   public  X doSomething() { /* statement */ return this; }<br /> }[/code]<br /> <br /> Como posso criar uma closure que retorne ela mesma? Faz sentido?<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537499.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537499.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 10:42:44]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj][code]public class X {<br />   public  X doSomething() { /* statement */ return this; }<br /> }[/code]<br /> <br /> Como posso criar uma closure que retorne ela mesma? Faz sentido?<br /> [/quote]<br /> <br /> Não tenho a certeza , mas o this dentro do bloco de refere a uma instância da classe X e não ao objeto da closure.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537554.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537554.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 11:53:45]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Humm é mesmo, não faria muito sentido!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537570.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537570.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 12:32:01]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [size=13][color=blue][b]Uma resposta interessante para Closures[/b][/color] [/size]<br /> <br /> [b]FONTE[/b] [url]http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587[/url]<br /> <br /> [b]&quot;I would still like to know what the closure abstration really means, then I will be<br /> able to appreciate how well it is supported in a specific language like C++ or Java&quot;[/b]<br /> <br /> In set algebra, a closure of a set S, w.r.t. a binary operator 'o' is a set that contains<br /> all elements of S and itself including the elements 'a o b', where a and b belong<br /> to S or the closure of S, i.e. there are no possible elements to be found outside<br /> this closure. e.g. mathematically, the set of all integers is a closure w.r.t. the +<br /> operator. (the sum of two integers still is an integer).<br /> <br /> Related to this mathematical notion is the closure of type 3 languages, or<br /> regular expressions if you prefer. If RE is a regular expression, then RE*, i.e.<br /> zero or more catenations of RE, is a closure of RE and is still a regular expression.<br /> <br /> In the functional programming language world, a closure is a function where<br /> no free variables can be found. e.g. f(x) &lt;- x+y is not a closure, but g(y) &lt;- f(x)<br /> is one, if y is bound to a value. 'Currying' is a closely related concept.<br /> <br /> If functions can be a first class citizen in a programming language, i.e. if functions<br /> can be passed as arguments to other functions, just like simple ints etc, closures<br /> are possible in that language no matter how 'mechanical' the construct.<br /> <br /> In C, closures can be implemented by passed the address of a funcion and a<br /> pointer to some struct that contains values needed by that function. The function<br /> itself can dig those values from somewhere in that struct.<br /> <br /> Object oriented language can 'hide' that fact a bit more by encapsulating those<br /> values, as well as the function itself in an object. Languages that allow operator<br /> overloading, including the function call 'operator' can hide this mechanism even<br /> more by faking the object to be a function.<br /> <br /> The possibilities are (almost?) endless here and it's up to your imagination how<br /> to fake/handle those 'closures'. BeanShell (an interpreted Java like language) for<br /> example allows this:<br /> <br /> [code]Object f() {<br />    int x= 42;<br />    void g() { System.out.println(&quot;Foo! &quot;+x); }<br />    return this;<br /> }<br /> Object o= f();<br /> o.g();<br /> [/code]<br /> <br /> This code snippet prints &quot;Foo! 42&quot;; function f() acts as a closure for function g() and<br /> can even keep all 'state' for that function g().<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537649.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537649.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 13:58:14]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Maurício Linhares][quote=Bruno Laturner]Isso é currying de função ou pré-configuração do objeto?<br /> <br /> Currying em Java só no dia que tivermos objetos-Função/Bloco[/quote]<br /> <br /> Traduzindo, quando Java tiver Closures :)[/quote]<br /> <br /> [code]Closure c = { int, int =&gt; int } soma = { int a, int b =&gt; a + b };[/code]  Isso, ou algo parecido, é possível?<br /> <br /> <br /> [quote=Marcio Duran][size=13][color=blue][b]Uma resposta interessante para Closures[/b][/color] [/size]<br /> <br /> (...)<br /> [/quote]<br /> Poste a fonte... http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537657.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537657.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 14:04:10]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Bruno Laturner]<br /> <br /> [/quote]<br /> <br /> [b]FONTE [/b]<br /> <br /> [url]http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587[/url]<br /> <br /> Achei que ficou melhor colocado, então postei essa [b]fonte Sun Java  Programming [/b]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537663.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537663.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 14:09:47]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote]<br /> Closure c = { int, int =&gt; int } soma = { int a, int b =&gt; a + b };<br /> [/quote]<br /> <br /> Não há um tipo &quot;Closure&quot;. Entretanto, você pode fazer a seguinte declaração:<br /> [code]<br /> {int,int =&gt; int} soma = {int a, int b =&gt; a + b };<br /> int x = soma.invoke (2, 3); // deve retornar 5<br /> [/code]<br /> Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:<br /> <br /> [code]<br /> class Teste implements {int, int =&gt; int}<br /> {<br />     public int invoke (int a, int b) { return a + b; }<br /> }<br /> [/code]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537982.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537982.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 20:15:47]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [b]Neal Gafter Discusses Closures, Language Features and Optional Typing[/b]<br /> Entrevista com alta resolução e texto simultaneo, InfoQ: Mais detalhes de Closures e JVM 1.7<br /> <br /> <img src="http://www.guj.com.br/images/smilies/8f7fb9dd46fb8ef86f81154a4feaada9.gif" border="0">  [url]http://www.infoq.com/interviews/gafter-closures-language-features-optional-typing[/url]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/537989.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/537989.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 20:23:27]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol]<br /> <br /> Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:<br /> <br /> [code]<br /> class Teste implements {int, int =&gt; int}<br /> {<br />     public int invoke (int a, int b) { return a + b; }<br /> }<br /> [/code]<br /> <br /> [/quote]<br /> <br /> citando alguém mais pra cima nesse post, rola um Too much Gambiarra aí ou um Warning: Not Syntax Sugar? :D<br /> <br /> Java desempenha um papel legal de compilador para novas linguagens sob a plataforma / linguagens dinâmicas (claro que nem sempre da maneira ideal para as linguagens dinâmicas). Agora essa incorporação de comportamento não previsto anteriormente no projeto da linguagem java tá de matar. =D<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538036.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538036.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 23:16:22]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol]Uma coisa que seria interessante em closures é se eu pudesse fazer currying também. <br /> <br /> Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:<br /> [code]<br /> #include &lt;boost/asio.hpp&gt;<br /> ...<br /> <br /> boost::asio::async_read (socket, boost::asio::buffer (buf, 0, nbytes), <br />     boost::bind (&MyClass::MyReadHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));<br /> [/code]<br /> onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred.<br /> <br /> [/quote]<br /> <br /> Isso daí que o thingol quer fazer tá parecendo com [url=http://www.guj.com.br/posts/list/82963.java]essa discussão aqui[/url]<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538037.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538037.java</link>
				<pubDate><![CDATA[Tue, 12 Aug 2008 23:22:07]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol][quote]<br /> Closure c = { int, int =&gt; int } soma = { int a, int b =&gt; a + b };<br /> [/quote]<br /> <br /> Não há um tipo &quot;Closure&quot;. Entretanto, você pode fazer a seguinte declaração:<br /> [code]<br /> {int,int =&gt; int} soma = {int a, int b =&gt; a + b };<br /> int x = soma.invoke (2, 3); // deve retornar 5<br /> [/code]<br /> Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:<br /> <br /> [code]<br /> class Teste implements {int, int =&gt; int}<br /> {<br />     public int invoke (int a, int b) { return a + b; }<br /> }<br /> [/code]<br /> <br /> [/quote]<br /> <br /> Sim, surgirá uma quantidade infinita de interfaces dentro do pacote javax.lang.function correspondentes aos closures. Uma bela gambiarra no compilador!<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538069.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538069.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 07:24:59]]> GMT</pubDate>
				<author><![CDATA[ victorwss]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol]<br /> Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:<br /> <br /> [code]<br /> class Teste implements {int, int =&gt; int}<br /> {<br />     public int invoke (int a, int b) { return a + b; }<br /> }<br /> [/code]<br /> <br /> [/quote]<br /> <br /> Admitindo que isso é possível ( o que me parece que não seja, mas tb não testei) estaria no mesmo nivel de codigos como <br /> [code]if ( a == true ) [/code]<br /> <br /> O objetido de um tipo de função (Function Type) é conter codigo, aka é o corpo entre chaves em um objeto ( já que e´a única coisa em java que não é uma objeto ... além dos primitivos, mas esse já têm o auto-boxing)<br /> Tipo de função são apenas um boxing de codigo.  Desde ponto de vista não ha razão para tentar escrever o código acima (até porque é "boxing" duplo ) e acredito que seria um anti-pattern pelo simples motivo que não é logico<br /> <br /> De outro ponto de vista tipos de função ( de que as closures são um sub-tipo) não são interfaces, são objetos. São objetos que implementam certas interfaces. Mas tanto as interfaces como os objetos são criadas em runtime , logo, elas nem existem em tempo de compilação o que levaria esse código a não compilar. ( como disse não testei, mas se funcionar não faz sentido algum...)<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538215.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538215.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 09:33:53]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ invoke em que ser chamado explicitamente?<br /> <br /> Acho sacanagem ter que fazer soma.invoke(2,3) em vez de soma(2,3). Se closures são funções, ajam como tal.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538387.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538387.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 12:11:45]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Ainda acho mais claro usar "soma.invoke (2, 3)" que "(*soma) (2, 3)" - que é o caso do C quando usamos ponteiros de função. (Em C++ pode-se usar (*soma) (2, 3) ou soma (2, 3) mas C++ tem 200 jeitos de fazer a mesma coisa, e um menos intuitivo que o outro).<br /> <br /> Mas realmente é uma gambiarra que existe porque a alternativa mais intuitiva (usar "soma (2, 3)"), segundo o sr. Neal Gafter, tem alguns problemas de ambigüidade sintática que são difíceis de resolver. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538394.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538394.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 12:15:50]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Bruno Laturner]invoke em que ser chamado explicitamente?<br /> <br /> Acho sacanagem ter que fazer soma.invoke(2,3) em vez de soma(2,3). Se closures são funções, ajam como tal.[/quote]<br /> <br /> A meu ver ai é que tá a sacada... closures são objetos.  "funções puras" continuam não existindo.<br /> <br /> Imagine que vc passa uma função com parametro de um método tipo assim<br /> <br /> [code]<br /> <br /> &lt;T&gt; void doSomething(List&lt;T&gt; list, { T=&gt; void} function ) {<br /> <br />     for (T t : list){<br />          function.invoke(t);<br />    }<br /> }<br /> <br /> [/code]<br /> <br /> Se vc não tiver o invoke, como executaria a função em cima de cada t ? <br /> Algo como function(t) implicaria que function é um método da classe, o que não é verdade.<br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538410.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538410.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 12:30:31]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=thingol]Mas realmente é uma gambiarra que existe porque a alternativa mais intuitiva (usar "soma (2, 3)"), segundo o sr. Neal Gafter, tem alguns problemas de ambigüidade sintática que são difíceis de resolver. [/quote]<br /> [quote=sergiotaborda]Se vc não tiver o invoke, como executaria a função em cima de cada t ? <br /> Algo como function(t) implicaria que function é um método da classe, o que não é verdade.[/quote]<br /> Respondendo ambos ao mesmo tempo:<br /> <br /> Resolvemos da mesma forma que fazemos com atributos do objeto e variáveis locais, ambos com o mesmo identificador, usando escopo.<br /> <br /> Edit: A questão não é "não ter invoke", é ele não ser a única opção.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538497.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538497.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 13:40:17]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Bruno Laturner]<br /> Respondendo ambos ao mesmo tempo:<br /> <br /> Resolvemos da mesma forma que fazemos com atributos do objeto e variáveis locais, ambos com o mesmo identificador, usando escopo.<br /> <br /> Edit: A questão não é "não ter invoke", é ele não ser a única opção.[/quote]<br /> <br /> Tudo bem que não seja a única opção. Mas existem opções melhores que outras.... <br /> Não entendi como o escopo poderia ajudar no exemplo que dei. Explique melhor essa ideia.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538508.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538508.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 13:47:39]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=peczenyj][code]public class X {<br />   public  X doSomething() { /* statement */ return this; }<br /> }[/code]<br /> <br /> Como posso criar uma closure que retorne ela mesma? Faz sentido?<br /> [/quote]<br /> <br /> Usa o Y Combinator.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538520.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538520.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 13:55:22]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=sergiotaborda]Não entendi como o escopo poderia ajudar no exemplo que dei. Explique melhor essa ideia.[/quote]<br /> function() não seria o método da classe, seria a função mais próxima definida no escopo.<br /> <br /> É um problema para visualizar isso na hora da manutenção? Bem, sim.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538541.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538541.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 14:08:59]]> GMT</pubDate>
				<author><![CDATA[ Bruno Laturner]]></author>
			</item>
			<item>
				<title>Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Leonardo3001]<br /> Em Python, não sei. Mas em Ruby, fica assim:<br /> <br /> [code]<br /> lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]<br /> puts lista.select {|a| a % 2 == 0}<br /> [/code]<br /> <br /> Apesar que eu acho que você foi injusto com Java, pois boa parte do seu código é para adicionar um método em ArrayList&lt;E&gt;. Na prática, quando Closure for real, novos métodos serão (ou deveriam ser) adicionados nas coleções, e ninguém fará isso à mão.<br /> <br /> Portanto, para comparação, vou considerar no código Java apenas a classe com método estático main.<br /> Fica assim:<br /> <br /> Java (com closure) -&gt; 9 linhas<br /> Scheme -&gt; 3 linhas<br /> Ruby -&gt; 2 linhas<br /> [/quote]<br /> <br /> Na maioria das linguagens com caracteristicas funcionais esse exemplo do filtro e possivel em 1 linha de codigo. Passa ser mais importante entao a sintaxe da linguagem. Neste aspecto Ruby nao e das piores mas acho que poderia ser melhor.<br /> <br /> editado: onde escrevi sintaxe queria dizer na verdade 'expressividade'.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538684.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538684.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 15:47:44]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=louds][quote=peczenyj][code]public class X {<br />   public  X doSomething() { /* statement */ return this; }<br /> }[/code]<br /> <br /> Como posso criar uma closure que retorne ela mesma? Faz sentido?<br /> [/quote]<br /> <br /> Usa o Y Combinator.[/quote]<br /> <br /> Agora boiei tb.<br /> <br /> Primeiro nao entendi porque uma funcao se daria ao trabalho de retornar ela mesma. Eu fico imaginando passar ou receber essa funcao e alguem precisar executa-la para que retorne a propria (digo ja enclosured).<br /> <br /> Y Combinator eu sei apenas que e pra criar funcoes recursivas... mas como nao consegui entender o problema muito menos consegui ligar com a solucao.  :) <br /> <br /> Talvez fizesse mais sentido uma funcao (e nao uma closure) que retornasse ela mesma.........]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/538698.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/538698.java</link>
				<pubDate><![CDATA[Wed, 13 Aug 2008 16:05:00]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Alguém pode me dar um exemplo prático de, como closures poderia resolver um problema, o qual não o consegueriamos sem ele?<br /> Só para eu entender onde realmente eu poderia empregá-lo...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/541623.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/541623.java</link>
				<pubDate><![CDATA[Tue, 19 Aug 2008 11:35:06]]> GMT</pubDate>
				<author><![CDATA[ facholi]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote]Alguém pode me dar um exemplo prático de, como closures poderia resolver um problema, o qual não o consegueriamos sem ele? [/quote]<br /> <br /> Muita gente passa a vida inteira sem sentir a menor falta delas. Closures, da maneira que estamos nos referindo aqui é uma maneira de usar higher order procedures, que nos permitem 'aumentar' nosso poder de abstração e a expressividade dos nossos programas. [url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#%_sec_1.3.4]Aqui[/url] tem um ótimo exemplo de como expressar derivadas usando high order procedures, é menos complicado do que parece.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/541635.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/541635.java</link>
				<pubDate><![CDATA[Tue, 19 Aug 2008 11:51:34]]> GMT</pubDate>
				<author><![CDATA[ dlt]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=cmoscoso]<br /> Agora boiei tb.<br /> <br /> Primeiro nao entendi porque uma funcao se daria ao trabalho de retornar ela mesma. Eu fico imaginando passar ou receber essa funcao e alguem precisar executa-la para que retorne a propria (digo ja enclosured).<br /> <br /> Y Combinator eu sei apenas que e pra criar funcoes recursivas... mas como nao consegui entender o problema muito menos consegui ligar com a solucao.  <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"> <br /> <br /> Talvez fizesse mais sentido uma funcao (e nao uma closure) que retornasse ela mesma.........[/quote]<br /> <br /> O YC permite a função ter uma referencia a si própria, agora se ela vai se chamar recursivamente ou simplesmente retornar o valor é indiferente.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/541659.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/541659.java</link>
				<pubDate><![CDATA[Tue, 19 Aug 2008 12:31:46]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=louds]<br /> O YC permite a função ter uma referencia a si própria, agora se ela vai se chamar recursivamente ou simplesmente retornar o valor é indiferente.[/quote]<br /> <br /> Louds, vc tem razao,<br /> <br /> E pq ando lendo sobre cultura lisp onde closures sao implementadas na linguagem desde sempre pra trabalhar com funcoes anonimas.<br /> <br /> Mas pensando melhor sobre nomenclatura em outras linguagens onde closures sao implementadas posteriormente, talvez seja melhor mesmo falar "retornar uma closure", pra diferenciar de outro mecanismo utilizado ate entao pela linguagem para passar/retornar blocos de codigo (classes internas anonimas em Java). Parece que em lisp essa diferenciacao nao é importante do ponto de vista pro programador. <br /> <br /> O que vc acha?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/541831.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/541831.java</link>
				<pubDate><![CDATA[Tue, 19 Aug 2008 15:04:52]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=facholi]Alguém pode me dar um exemplo prático de, como closures poderia resolver um problema, o qual não o consegueriamos sem ele?<br /> Só para eu entender onde realmente eu poderia empregá-lo...[/quote]<br /> <br /> Da mesma forma que não existe problema que OO resola que não seja resolvido antes você não vai encontrar um exemplo destes. A questão é apenas a maneira como resolvemos. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/542042.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/542042.java</link>
				<pubDate><![CDATA[Tue, 19 Aug 2008 23:10:20]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=cmoscoso][quote=louds]<br /> O YC permite a função ter uma referencia a si própria, agora se ela vai se chamar recursivamente ou simplesmente retornar o valor é indiferente.[/quote]<br /> <br /> Louds, vc tem razao,<br /> <br /> E pq ando lendo sobre cultura lisp onde closures sao implementadas na linguagem desde sempre pra trabalhar com funcoes anonimas.<br /> <br /> Mas pensando melhor sobre nomenclatura em outras linguagens onde closures sao implementadas posteriormente, talvez seja melhor mesmo falar "retornar uma closure", pra diferenciar de outro mecanismo utilizado ate entao pela linguagem para passar/retornar blocos de codigo (classes internas anonimas em Java). Parece que em lisp essa diferenciacao nao é importante do ponto de vista pro programador. <br /> <br /> O que vc acha?[/quote]<br /> <br /> Acho que levará bastante tempo até a comunidade realizar o poder do que é possível com closures.<br /> <br /> Vejo isso pelo .NET. As pessoas ainda estão explorando muito o C# 3.0.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/542785.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/542785.java</link>
				<pubDate><![CDATA[Thu, 21 Aug 2008 08:46:14]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ O problema do Java é que ele ficou "institucionalizado" - é uma linguagem didática e comercial, como se fosse um Cobol moderno (sempre que quero chocar um Java-maníaco, digo para ele que "Java == COBOL").<br /> E é por isso que acabam se opondo às mudanças; como se sabe, é mais difícil fazer uma mudança que não destrua tudo que já foi feito - como foi o caso do "generics", que tentou ser retrocompatível com os programas antigos e ficou extremamente difícil de entender - que uma mudança que destrua tudo (como é o caso de cada versão do C# que aparece). <br /> A nova mudança (closures), que tem de ser retrocompatível com os programas antigos, também é difícil de entender, e fica um pouco abaixo das expectativas - se a Sun simplesmente fosse a única dona do Java, e ela se notabilizasse por destruir tudo que foi feito antes - o que não é bem o que a Sun faz; programas antigos em C que rodam em antigas máquinas Sparc continuam rodando nas novas de hoje em dia sem problemas  - então ela poderia fazer algo mais simples, como o que apareceu no C# 3.0.<br /> O Neal Gafter, embora não trabalhe mais para a Sun, compreende o que deve ser feito para não afetar os programas antigos, e é por isso que a parte de Closures é menos ambiciosa e mais complicada do que ela poderia ser.<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/542849.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/542849.java</link>
				<pubDate><![CDATA[Thu, 21 Aug 2008 09:45:25]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ Pro Louds:<br /> Sera que os programadores nao explorarao o poder de closures em Java por falta de ambicao na implementacao (o thingol colocou como 'a coisa certa', ignorar compatibilidade retroativa) ou por que os proprios programadores nao conhecem tecnicas de programacao funcional?<br /> <br /> Pro Thingol:<br /> Deve ter sido mesmo um trabalho do cao pra implementar closures em Java mas vc acha mesmo que a interface ficou tao ruim ao ponto de ser pior pra entender do que todas aquelas regrinhas especificas do uso de classes internas, sintaxe fora do convencional para classes anonimas, ter que declarar variaveis final?<br /> <br /> A minha opiniao é que sim, simplicidade na implementacao importa mas compatibilidade tb é importante ate certo ponto.<br /> <br /> "Java == COBOL [b]Moderno[/b]", vc disse tudo aqui, eu tenho a mesma impressao mas.. isso é necessariamente algo ruim?<br /> <br /> Apenas se Java for sua unica opcao para tudo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/542983.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/542983.java</link>
				<pubDate><![CDATA[Thu, 21 Aug 2008 12:33:16]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=sergiotaborda][Bruno Laturner]invoke em que ser chamado explicitamente?<br /> <br /> Acho sacanagem ter que fazer soma.invoke(2,3) em vez de soma(2,3). Se closures são funções, ajam como tal.[/quote]<br /> [quote] <br /> A meu ver ai é que tá a sacada... closures são objetos.  "funções puras" continuam não existindo.<br /> <br /> Imagine que vc passa uma função com parametro de um método tipo assim<br /> <br /> [code]<br /> <br /> &lt;T&gt; void doSomething(List&lt;T&gt; list, { T=&gt; void} function ) {<br /> <br />     for (T t : list){<br />          function.invoke(t);<br />    }<br /> }<br /> <br /> [/code]<br /> Se vc não tiver o invoke, como executaria a função em cima de cada t ? <br /> Algo como function(t) implicaria que function é um método da classe, o que não é verdade.<br /> [/quote]<br /> <br /> Segundo autor da fonte confiável, "Anonima" vou colocar aqui a resposta que achei plausível.<br /> <br /> "Closure não será incorporado pela linguagem (pelo menos em Java 7) segundo palavras do próprio Mister M (Michael Nascimento) e mesmo na comunidade internacional, houve uma arrefecida desse tópico." <br /> <br /> Agora segundo, anonimo, ai vem a resposta !!!<br /> <br /> A sua afirmação sobre uma forma de se declarar uma classe simplificada que possuirá apenas uma função não deixa de ser verdade no contexto de Java.A primeira utilização seria para contemplar um problema que a comunidade java reclama, a verborragia da linguagem. <br /> <br /> Seria melhor fazer isso: <br /> [code]<br /> import java.util.ArrayList; <br /> import java.util.Collections; <br /> import java.util.Comparator; <br /> import java.util.List; <br /> <br /> <br /> public class Teste{ <br />     public static void main(String[] args){ <br />           List&lt;Endereco&gt; l = new ArrayList&lt;Endereco&gt;(); <br />           l.add(new Endereco("Rua dos Batatais",327)); <br />           l.add(new Endereco("Rua das Cebolas",127)); <br />           <br />           Collections.sort(l,new Ordenador()); <br />           for (Endereco endereco : l) { <br />             System.out.println(endereco.getRua()); <br />         } <br />     } <br /> } <br /> <br /> [/code]<br /> [b]ou isso (usando a notação proposta pelo Neal Gafter)?[/b] <br /> <br /> [code]<br /> import java.util.ArrayList; <br /> import java.util.Collections; <br /> import java.util.Comparator; <br /> import java.util.List; <br /> <br /> <br /> public class Teste{ <br />     public static void main(String[] args){ <br />           List&lt;Endereco&gt; l = new ArrayList&lt;Endereco&gt;(); <br />           l.add(new Endereco("Rua dos Batatais",327)); <br />           l.add(new Endereco("Rua das Cebolas",127)); <br />          int(Object, Object) funcao = (Object e1, Object e2){ <br />                                             return ((Endereco)o1).getNumero()-((Endereco)o2).getNumero(); <br />                                       }; <br />           Collections.sort(l,funcao); <br />           for (Object o : l) { <br />             System.out.println(((Endereco)o).getRua()); <br />         } <br />     } <br /> } <br /> <br /> [/code]<br /> --Classe Endereco usada acima -- <br /> <br /> [code]<br /> public class Endereco { <br /> <br />     private String rua; <br />     private int numero; <br /> <br />     public Endereco(String string, int i) { <br />         this.rua = string; <br />         this.numero = i; <br />     } <br /> <br />     String getRua() { <br />         return rua; <br />     } <br /> <br />     void setRua(String rua) { <br />         this.rua = rua; <br />     } <br /> <br />     int getNumero() { <br />         return numero; <br />     } <br /> <br />     void setNumero(int numero) { <br />         this.numero = numero; <br />     } <br /> <br /> } <br /> [/code]<br /> ---- <br /> PS: haveria uma nova sobrecarga no Collections.sort, para aceitar uma "função" <br /> <br /> Essa seria então a idéia inicial: Criar um açúcar sintático  eliminando a regra de que tudo tem de ser uma classe em java(nesse contexto, "explodimos" uma das regras de Ouro em Java). <br /> <br /> Isso é bom, por limpar a quantidade código digitada pelo desenvolvedor, mas essa seria a resposta mais simplória. <br /> <br /> O uso de closures não é apenas isso. Ele é muito mais do que isso! <br /> <br /> Se Java aceitar tal facilidade do jeito que foi concebida, e suportar o método invoke que utilizou no código abaixo nós teremos uma das qualidades mais interessantes que uma linguagem ofereceria: a injeção de código em lacunas a serem preenchidas pelos desenvolvedores. <br /> <br /> Design patterns como o Template, não precisariam ser implementados da maneira que existe em muitos frameworks em Java (exemplo classico é o que Struts faz). <br /> <br /> .NET caminhou para esse lado, ao suportar os métodos anônimos (anonymous methods) e que oferece atualmente o LinQ, que é uma maneira de acessa a camada de dados de maneira transparente. <br /> <br /> Outro ponto, bem citado pelo Joel Spolsky e é bem verdade, está no seguinte link: <br /> <br /> http://www.joelonsoftware.com/items/2006/08/01.html<br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/543284.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/543284.java</link>
				<pubDate><![CDATA[Thu, 21 Aug 2008 18:58:38]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Marcio Duran]Essa seria então a idéia inicial: Criar um açúcar sintático eliminando a regra de que tudo tem de ser uma classe em java(nesse contexto, "explodimos" uma das regras de Ouro em Java).[/quote]<br /> <br /> O que acontece é que as classes eliminadas neste caso são boilerplates em forma de classes (frequentemente anônimas) que não representam nenhuma entidade real do sistema e estão lá apenas por conta de limitações da linguagem. Ou seja, não ocorre nenhuma explosão da OO, e sim flexibilização da linguagem que acaba por abstrair a necessidade de criar-se uma classe específica para um trabalho.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/544078.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/544078.java</link>
				<pubDate><![CDATA[Sat, 23 Aug 2008 11:38:16]]> GMT</pubDate>
				<author><![CDATA[ victorwss]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Marcio Duran]<br /> <br /> Essa seria então a idéia inicial: Criar um açúcar sintático  eliminando a regra de que tudo tem de ser uma classe em java(nesse contexto, "explodimos" uma das regras de Ouro em Java). <br /> <br /> [/quote]<br /> <br /> Essa regra de ouro eu não conheço. Nem tudo é objeto em java. int, long .etc não são objetos.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/544079.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/544079.java</link>
				<pubDate><![CDATA[Sat, 23 Aug 2008 11:54:08]]> GMT</pubDate>
				<author><![CDATA[ Ssalgado]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=Ssalgado][quote=Marcio Duran]<br /> <br /> Essa seria então a idéia inicial: Criar um açúcar sintático  eliminando a regra de que tudo tem de ser uma classe em java(nesse contexto, "explodimos" uma das regras de Ouro em Java). <br /> <br /> [/quote]<br /> <br /> Essa regra de ouro eu não conheço. Nem tudo é objeto em java. int, long .etc não são objetos.[/quote]<br /> <br /> Java é uma linguagem fortemente orientada a objetos e tipos.  Todas as estruturas são objetos.<br /> int,long etc.. não são estruturas.  Mas os primitivos são exceções ha regra introduzidos apenas por questões de performance e limitação (lembre-se que Java foi criado originalmente para setop boxes com ambientes limitados. isso fico enrraizado na linguagem e o objetvo continua válido ainda hoje. )<br /> Por isso em java temos tipos primitivos e objetos. Objetos por principio e primitivos por questões tecnicas de performance , etc..<br /> <br /> Agora, introduzindo um novo tipo chamado "função" ele seria primitivo ou objeto ?<br /> <br /> O ponto é que Java tem as suas estruturas amarradas como objetos. Então ,sendo uma função uma estrutura ela deveria ser um objeto.  Se ela não for ela será um primitivo. Mas ser um primitivo viola a regra de que apenas os primitivos são primitivos e o resto são objetos. Por outro lado estariamos confiando que uma função é um tipo especial de primitivo já que não ha promoção entre int e function, mas ha entre int e double, por exemplo. Então a escolha recai logicamente em que função tem que ser um objeto.<br /> E é isso que os Function Types são. Objetos que implementam interfaces especiais. Primitivos continuam sendo primitivos e o resto são objetos. <br /> <br /> Porderiamos abrir um terceiro tipo e java passaria a ter primitivos, objetos e funções. <br /> Sendo que primitivo é uma exceção a objeto , função seria uma exceção a ambos. Isso trás vários problemas tecnicos e até fiolosoficos. A escolha de tornar função objetos é simples, clara e de acordo com a politica usada até agora. Até anotations são objetos. E repare que eles são completamente intropectivos ( não pdoe dar um new em annotation). function type segue o mesmo caminho. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/544265.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/544265.java</link>
				<pubDate><![CDATA[Sun, 24 Aug 2008 11:43:13]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=sergiotaborda]<br /> Java é uma linguagem fortemente orientada a objetos e tipos.  Todas as estruturas são objetos.<br /> int,long etc.. não são estruturas.  Mas os primitivos são exceções ha regra introduzidos apenas por questões de performance e limitação (lembre-se que Java foi criado originalmente para setop boxes com ambientes limitados. isso fico enrraizado na linguagem e o objetvo continua válido ainda hoje. )<br /> Por isso em java temos tipos primitivos e objetos. Objetos por principio e primitivos por questões tecnicas de performance , etc..<br /> [/quote]<br /> <br /> Isso não é verdade. A distinção existe por pura incompetência dos designers da linguagem e máquina virtual. A CLR não possui qualquer forma de tipo primitivo<br /> e tem performance na mesma categoria do Java. Alimentar um mito envolva desses erros é um enorme desserviço a todos aqui no GUJ.<br /> <br /> [quote=sergiotaborda]<br /> Agora, introduzindo um novo tipo chamado "função" ele seria primitivo ou objeto ?<br /> [/quote]<br /> <br /> Essa discussão de primitivo ou objeto é enraizada na ignorância da distinção entre ambos.<br /> Não faz sentido argumentar em cima disso quando, fundamentalmente, deveriam questionar sobre<br /> quais carregam semântica de value type/scalar ou reference type.<br /> Pois está a distinção dos tipos em Java rotulados de primitivos por falha dos designers da linguagem.<br /> <br /> Curiosamente, esta é uma exigência feita a mais de uma década para a Sun, suportar tipos escalares<br /> arbitrários.<br /> <br /> [quote=sergiotaborda]<br /> O ponto é que Java tem as suas estruturas amarradas como objetos. Então ,sendo uma função uma estrutura ela deveria ser um objeto.  Se ela não for ela será um primitivo. Mas ser um primitivo viola a regra de que apenas os primitivos são primitivos e o resto são objetos. Por outro lado estariamos confiando que uma função é um tipo especial de primitivo já que não ha promoção entre int e function, mas ha entre int e double, por exemplo. Então a escolha recai logicamente em que função tem que ser um objeto.<br /> E é isso que os Function Types são. Objetos que implementam interfaces especiais. Primitivos continuam sendo primitivos e o resto são objetos. <br /> <br /> Porderiamos abrir um terceiro tipo e java passaria a ter primitivos, objetos e funções. <br /> Sendo que primitivo é uma exceção a objeto , função seria uma exceção a ambos. Isso trás vários problemas tecnicos e até fiolosoficos. A escolha de tornar função objetos é simples, clara e de acordo com a politica usada até agora. Até anotations são objetos. E repare que eles são completamente intropectivos ( não pdoe dar um new em annotation). function type segue o mesmo caminho. [/quote]<br /> <br /> Seu questionamento é completamente descabido. Pois uma closure é isomorfa a um tipo por referência, a um objeto. Anotações são tipos comuns a linguagem e a questão<br /> de poderem ser usadas para anotar membros é ortogonal, elas são apenas uma categoria particular de interfaces. <br /> <br /> <br /> Sérgio, por favor, faça sua lição de casa antes de sair disseminando desinformação.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/544270.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/544270.java</link>
				<pubDate><![CDATA[Sun, 24 Aug 2008 13:00:00]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Protótipo de Closures em Java está &quot;feature-complete&quot;</title>
				<description><![CDATA[ [quote=louds][quote=sergiotaborda]<br /> Java é uma linguagem fortemente orientada a objetos e tipos.  Todas as estruturas são objetos.<br /> int,long etc.. não são estruturas.  Mas os primitivos são exceções ha regra introduzidos apenas por questões de performance e limitação (lembre-se que Java foi criado originalmente para setop boxes com ambientes limitados. isso fico enrraizado na linguagem e o objetvo continua válido ainda hoje. )<br /> Por isso em java temos tipos primitivos e objetos. Objetos por principio e primitivos por questões tecnicas de performance , etc..<br /> [/quote]<br /> <br /> Isso não é verdade. A distinção existe por pura incompetência dos designers da linguagem e máquina virtual. A CLR não possui qualquer forma de tipo primitivo<br /> [/quote]<br /> <br /> Devo compreender das suas palavras que vc só usa Long, Integer, Boolean, Double , etc.. nos seus programas ? e nunca long, int , boolean , double ? <br /> Devo compreender das suas palavras que escreve ifs assim :<br /> <br /> [code]<br /> <br /> if (a.booleanValue()){<br /> <br /> // do something<br /> }<br /> <br /> [/code]<br /> <br /> [quote=louds]<br /> [quote=sergiotaborda]<br /> Agora, introduzindo um novo tipo chamado "função" ele seria primitivo ou objeto ?<br /> [/quote]<br /> <br /> Essa discussão de primitivo ou objeto é enraizada na ignorância da distinção entre ambos.<br /> Não faz sentido argumentar em cima disso quando, fundamentalmente, deveriam questionar sobre<br /> quais carregam semântica de value type/scalar ou reference type.<br /> Pois está a distinção dos tipos em Java rotulados de primitivos por falha dos designers da linguagem.<br /> [/quote]<br /> <br /> Vc quer descer em um nivel que não estava na mensagem que respondi. <br /> <br /> [quote=louds]<br /> [quote=sergiotaborda]<br /> O ponto é que Java tem as suas estruturas amarradas como objetos. Então ,sendo uma função uma estrutura ela deveria ser um objeto.  Se ela não for ela será um primitivo. Mas ser um primitivo viola a regra de que apenas os primitivos são primitivos e o resto são objetos. Por outro lado estariamos confiando que uma função é um tipo especial de primitivo já que não ha promoção entre int e function, mas ha entre int e double, por exemplo. Então a escolha recai logicamente em que função tem que ser um objeto.<br /> E é isso que os Function Types são. Objetos que implementam interfaces especiais. Primitivos continuam sendo primitivos e o resto são objetos. <br /> <br /> Porderiamos abrir um terceiro tipo e java passaria a ter primitivos, objetos e funções. <br /> Sendo que primitivo é uma exceção a objeto , função seria uma exceção a ambos. Isso trás vários problemas tecnicos e até fiolosoficos. A escolha de tornar função objetos é simples, clara e de acordo com a politica usada até agora. Até anotations são objetos. E repare que eles são completamente intropectivos ( não pdoe dar um new em annotation). function type segue o mesmo caminho. [/quote]<br /> <br /> Seu questionamento é completamente descabido. Pois uma closure é isomorfa a um tipo por referência, a um objeto. Anotações são tipos comuns a linguagem e a questão<br /> de poderem ser usadas para anotar membros é ortogonal, elas são apenas uma categoria particular de interfaces. <br /> [/quote]<br /> <br /> Chame o que quiser. Mas quando vc faz :<br /> <br /> [code]<br /> Annotation x;<br /> [/code]<br /> <br /> e usa reflection para obter x , x não é um tipo primitivo. Da mesma forma que function type também não é tipo primitivo. Esse era o ponto.  A regra de ouro citada é exatamente essa "apenas os primitivos são primitivos".<br /> Que o mesmo que dizer que "em java tudo são objetos". A exceção - sendo um erro ou não - é uma exceção à regra. <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/99477/544297.java</guid>
				<link>http://www.guj.com.br/posts/preList/99477/544297.java</link>
				<pubDate><![CDATA[Sun, 24 Aug 2008 14:43:11]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
	</channel>
</rss>