Sintaxe (quase) final para as Closures do Java 8

Finalmente o expert group do Lambda-dev decidiu a sintaxe. Seguem alguns exemplos:

x => x + 1

(x) => x + 1
(int x) => x + 1
(int x, int y) => x + y
(x, y) => x + y
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
() => { System.out.println(“I am a Runnable”); }

O Java 8 deve sair em outubro de 2012.

Mais informações:
http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html

A sintaxe “velha” pode ser vista aqui:

Alguém sabe a situação dos SAM types e virtual extension/defender methods?

Uma passagem interessante da divulgação:

Ou seja, é uma forma “emprestada” de Scala e C#.

[quote=fabiocsilva]Uma passagem interessante da divulgação:

Ou seja, é uma forma “emprestada” de Scala e C#.[/quote]

Ja ia falar que ta muito parecido com Scala :smiley:

[quote=fredferrao][quote=fabiocsilva]Uma passagem interessante da divulgação:

Ou seja, é uma forma “emprestada” de Scala e C#.[/quote]

Ja ia falar que ta muito parecido com Scala :smiley: [/quote]
++
Curti :smiley:

[quote=Paulo Silveira]Finalmente o expert group do Lambda-dev decidiu a sintaxe. Seguem alguns exemplos:

x => x + 1

(x) => x + 1
(int x) => x + 1
(int x, int y) => x + y
(x, y) => x + y
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
() => { System.out.println(“I am a Runnable”); }

O Java 8 deve sair em outubro de 2012.

Mais informações:
http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html

A sintaxe “velha” pode ser vista aqui:
http://blog.caelum.com.br/trabalhando-com-closures-no-java-8/[/quote]

Alguém sabe se esse recurso (lambda-dev | closure) tem acesso ao contexto externo ao qual ela foi chamada? (Por definição e na teoria sim)

[quote=dreampeppers99][quote=Paulo Silveira]Finalmente o expert group do Lambda-dev decidiu a sintaxe. Seguem alguns exemplos:

x => x + 1

(x) => x + 1
(int x) => x + 1
(int x, int y) => x + y
(x, y) => x + y
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
() => { System.out.println(“I am a Runnable”); }

O Java 8 deve sair em outubro de 2012.

Mais informações:
http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html

A sintaxe “velha” pode ser vista aqui:
http://blog.caelum.com.br/trabalhando-com-closures-no-java-8/[/quote]

Alguém sabe se esse recurso (lambda-dev | closure) tem acesso ao contexto externo ao qual ela foi chamada? (Por definição e na teoria sim)[/quote]
Acho que deve ser sim, afinal é só uma forma nova de trabalhar com funções em Java.

Falam tanto de closures, mas na prática isso vai ajudar o desenvolvedor em 0,1% das situações pra economizar 2 ou 3 linhas de código.

A maior vantagem da Oracle implementar é não ter de ficar ouvindo mais “C# é superior porque tem closures”, “Java não presta porque não tem nem closures”.

[quote=marcosalex]Falam tanto de closures, mas na prática isso vai ajudar o desenvolvedor em 0,1% das situações pra economizar 2 ou 3 linhas de código.

A maior vantagem da Oracle implementar é não ter de ficar ouvindo mais “C# é superior porque tem closures”, “Java não presta porque não tem nem closures”.[/quote]

Talvez isto é uma visão simplista da coisa.

Vejo o uso de closures e, principalmente, first class functions como um recurso muito poderoso mesmo para situações normais.
Como ainda não existe em Java, a gente não sente falta… mas a partir do momento que está lá, a gente começa a achar utilidades.
É meio que a questão do Blub do Paul Graham

Por experiência, posso dizer que desde que descobri que javascript tinha esses recursos (costumava usar só pra validar campos), consegui resolver problemas de formas muito mais simples do que antes.

[quote=marcosalex]Falam tanto de closures, mas na prática isso vai ajudar o desenvolvedor em 0,1% das situações pra economizar 2 ou 3 linhas de código.

A maior vantagem da Oracle implementar é não ter de ficar ouvindo mais “C# é superior porque tem closures”, “Java não presta porque não tem nem closures”.[/quote]

Isso não é totalmente verdade, só o fato deu implementar o pattern Strategy sem Anonymous Inner Classes (sem falar, que pode haver situações onde ele torna-se desnecessário) para resolver problemas que os closures resolvem facilmente (vide Ruby) já é algo excelente.

Eu dou manutenção para um sistema G.I.G.A.N.T.E., então, se tomar apenas a sua afirmação de 2 ou 3 linhas de código, ainda sim, há vantagem no uso de clousures.

Bom, essa é minha opinião, mas não vou brigar por causa disso. :lol: :lol:

Útil ou não, até o ano que vem o recurso vai estar contido na linguagem.

[quote=marcosalex]Falam tanto de closures, mas na prática isso vai ajudar o desenvolvedor em 0,1% das situações pra economizar 2 ou 3 linhas de código.

A maior vantagem da Oracle implementar é não ter de ficar ouvindo mais “C# é superior porque tem closures”, “Java não presta porque não tem nem closures”.[/quote]

Agora vc vai ouvir:

“Java soh copia C#” ahahah :wink:

De qualquer forma, otima noticia. Tava mais do que na hora!

//Daniel

[quote=marcosalex]Bom, essa é minha opinião, mas não vou brigar por causa disso. :lol: :lol:

Útil ou não, até o ano que vem o recurso vai estar contido na linguagem. [/quote]

Claro que não vamos brigar, muito pelo contrário, quero ser muito amigo de quem já postou tanta coisa relevante aqui no GUJ!

Abraço!