BT
x Por favor preencha a pesquisa do InfoQ !

Mark Reinhold sobre Closures para Java

por Charles Humble , traduzido por Rodrigo Branas em 02 Dez 2009 |

Seguindo o surpreendente anúncio da semana passada na Devoxx de que a Sun adicionaria closures no Java, Mark Reinhold publicou em seu blog mais detalhes sobre essa decisão.

Uma das principais utilidades para as closures em Java são para a programação paralelas. Reinhold argumenta que usar ferramentas como arrays paralelas requer muito código repetido, e com as closures na linguagem seria possível eliminar repetições de código como essas. Ele vai além:

Nos últimos anos, três propostas sérias de adicionar closures para o Java foram apresentadas: BGGA, CICE e FCM. Essas propostas abrangem uma ampla gama em termos de complexidade e força. No meu ponto de vista, após ter estudado todas as propostas, é de que cada uma contém boas ideias ainda que nenhuma seja completamente apropriada.

 

Para suportar as principais utilidades da programação paralela nós só precisamos realmente de duas funcionalidades:

  • Sintaxe literal, para escrever closures.
  • Tipos funcionais, de modo que as closures sejam tipadas.

Para integrar closures com o resto da linguagem e da plataforma nós precisamos de duas funcionalidades adicionais:

  • Conversão de closures, de modo que uma closure de um tipo apropriado possa ser utilizado onde um objeto de um método de uma interface ou classe abstrata é requerido.
  • Métodos de extensão, de modo que métodos orientados pela closure possam ser adaptados a bibliotecas existentes e particularmente o framework Collections, sem quebrar a compatibilidade.

Java é frequentemente criticado pela lentidão de sua evolução. Embora o argumento seja exagerado (Java passou por 4 revisões desde a última atualização do C++) todo incentivo a experimentação da linguagem Java é positivo, desde que não impacte a diretamente na compatibilidade da linguagem. Em um artigo anterior, eu explorei três técnicas alternativas que permitem isso - DSLs, o processador de anotação de Java 6, e movendo o local padrão para suavizar a linguagem para a IDE - mas ao mesmo tempo que cada uma dessas técnicas são úteis, descobrimos que cada uma tinha suas limitações ao tentar fornecer suporte a closures. A solução da Sun é utilizar o projeto JDK 7 para fazer a experimentação antes de decidir tornar a funcionalidade padrão para o Java SE. Como Reinhold colocou:

A Sun vai iniciar o design e a implementação das funcionalidades simples de closures, conforme descrito acima, e adicioná-la ao JDK 7 de modo a permitir uma ampla experimentação. Se tudo correr bem, então nós vamos apresentar uma alteração para a linguagem JSR que por sua vez seria proposto como um componente da eventual Java SE 7 JSR.

A Sun está empenhada, assim como "todos os que participaram da conversas anteriores sobre closures - bem como qualquer outra pessoa com uma opinião formada" e uma proposta inicial está sendo esperada em breve.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

Percebemos que você está utilizando um bloqueador de propagandas

Nós entendemos porquê utilizar um bloqueador de propagandas. No entanto, nós precisamos da sua ajuda para manter o InfoQ gratuito. O InfoQ não compartilhará seus dados com nenhum terceiro sem que você autorize. Procuramos trabalhar com anúncios de empresas e produtos que sejam relevantes para nossos leitores. Por favor, considere adicionar o InfoQ como uma exceção no seu bloqueador de propagandas.