Como os fechamentos em Java afetarão a Comunidade Java?


11

É um dos recursos mais comentados planejados para Java: Encerramentos. Muitos de nós ansiamos por eles. Alguns de nós (inclusive eu) ficamos um pouco impacientes e recorremos a linguagens de script para preencher o vazio.

Porém, quando os fechamentos finalmente chegarem ao Java: como eles afetarão a Comunidade Java? O avanço das linguagens de script direcionadas à VM fica lento para um rastreamento, permanece o mesmo ou entra em colapso? As pessoas vão adotar a nova sintaxe de fechamento, transformando assim as bases de código Java em implementações mais estruturadas funcionalmente? Veremos apenas fechamentos espalhados em Java por toda parte? Qual será o efeito no suporte à ferramenta / IDE? E quanto ao desempenho? E, finalmente, o que significa para a adoção contínua do Java, como linguagem, em comparação com outras linguagens que estão crescendo em popularidade?

Para fornecer um exemplo de uma das mais recentes especificações de sintaxe do Java Closure propostas:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

se tornaria ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[fonte: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


O exemplo que você postou é de muitos anos atrás. Tem certeza de que é representativo das propostas atuais?
11118 Daniel Earwicker

Não pode ser: sinta-se livre para rever o meu exemplo

3
Eu parei mais ou menos usando Java recentemente. Ainda estou ansioso por fechamentos.
Anto

@ Daniel - esta não é a proposta atual, parece haver um mais atual (e muito diferente) um aqui: baptiste-wicht.com/2010/05/...
Nicole

é como expressão lambda C #?
Louis Rhys

Respostas:


4

Acho que levará algum tempo para muitos desenvolvedores Java "comuns" entenderem esse conceito, se ainda não estiverem familiarizados com ele, mas gradualmente ele será facilitado no uso regular de Java, para nosso benefício. Seria ótimo se ele fosse adotado tão rapidamente quanto os genéricos quando o Java 5 chegasse.

Eu imagino que isso não afetará as linguagens de script direcionadas à VM tanto quanto é apenas uma vantagem de usar aquelas que a possuem.


3

Existe um ciclo usual que acompanha qualquer nova ferramenta brilhante:

  • Excitação em massa, com uma enxurrada de novos usuários abusando dela. Isso é normal e saudável, pois nos ajuda a entender as limitações da nova ferramenta e como ela pode ser usada.
  • As pessoas mais reservadas dirão e rejeitarão os primeiros adotantes como sendo tolos
  • Eventualmente, a empolgação se esvai e os adotantes adotam maneiras saudáveis ​​de usar a nova ferramenta
  • Pessoas mais reservadas começarão a invejar a produtividade das pessoas que usam a nova ferramenta e começarão a adotá-la - usando os padrões agora saudáveis.

Tudo isso leva alguns anos para percorrer. Isso aconteceu com anotações e genéricos, e também com fechamentos.

Impacto nas pessoas da linguagem de script:

  • Para idiomas que suportam fechamentos, isso ajudará os escritores da linguagem de script a realizar seu trabalho com mais eficiência. Como eles já sabem usar fechos, eles não necessariamente fazem coisas loucas.
  • Para idiomas que não suportam fechamentos, isso será amplamente ignorado.

1

Aqueles que gostam de programação multiencadeada poderão incorporar estruturas de dados imutáveis ​​em Java e manipulá-las de uma maneira mais semelhante ao ceceio, sem a necessidade de recorrer a não-sequenciadores devido à incompatibilidade de impedância de linguagem entre Java e Lisp.

Aqueles que não usarem (ou entenderem) nenhuma das opções acima serão capazes de fazer as coisas como antes.


1
Isso não faz sentido. Os fechamentos não têm nada a ver com segmentação ou mutabilidade.
davidk01 30/09/12

Eles fazem. O fechamento adequado requer imutabilidade para trabalhar sem explosões cerebrais.
Permeakra # 30/12

Não, eles não. Um fechamento é um pedaço de código que sabe sobre o ambiente em que foi criado. É isso.
davidk01 30/09/12

1
@ davidk01 a definição é boa, mas quando o fechamento tem um link para variável mutável, seu resultado muda com a variável alterada. Normalmente, não é isso que se deseja, mas se o compilador não se opuser, o erro é quase indetectável.
Permeakra #

1
@ davidk01 Não, não sei. O que quero dizer é que os fechamentos / lambdas funcionam bem se estiverem vinculados à imutabilidade das variáveis ​​capturadas. Caso contrário, você estará à mercê de Tzeentch, e apenas adoradores dedicados têm chances aqui.
Permeakra1

1

Eu suspeito que as pessoas familiarizadas com os fechamentos começarão a usá-los no código do aplicativo. Eles os evitarão nas bibliotecas por um tempo para manter a compatibilidade com versões anteriores do Java.

Programadores que não estão familiarizados com fechamentos de outras linguagens demoram a adotá-los em Java.

Os genéricos foram adotados rapidamente quando foram introduzidos ao Java parcialmente devido a todos os avisos que apareceram quando você atualizou e por causa de sua incorporação no SDK. Isso não será verdade com os fechamentos. Será mais difícil encontrar evidências de sua existência; portanto, somente quem quiser usá-los os usará.

Não acho que o desenvolvimento de outras linguagens de script da JVM pare. Esses idiomas têm impulso e muitos recursos, além de fechamentos. No entanto, podemos ver menos novos idiomas da JVM, pois o fechamento foi o principal impulso para a criação de novos idiomas da JVM.


Você deve dar uma olhada no mseifed.blogspot.se/2012/09/… Eu acho isso incrível!
momomo 29/09/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.