E para os críticos ferrenhos da verbosidade do Java, mais um recurso está surgindo de forma muita aclamada no Java: “closures” também conhecido como expressão “lambda”
Recurso extremamente utilizado e glamorizado no SmallTalk, presente no Python, Lisp, Boo, sendo muito difundido no C++ via a implementação do BOOST – e divulgada aos quatro ventos pelos programadores Ruby que o tem de forma natural. O Java está na lanterninha em sua implementação sendo que ele ainda nem é um JSR, sendo por enquanto apenas uma proposta de alguns dos colaboradores mais descolados do Java.
“Closure” é uma função anônima que referencia variáveis livres no contexto léxico; ela consiste do código da função e referências para quaisquer variáveis no escopo da função exterior. Ela deve ser capaz de retornar diretamente do método incluindo a definição de encerramento (aka non-local return).
Num exemplo irônico ele pode ser “ilustrado” da seguinte forma:
Bye, bye:
public interface Runnable {
void run();
}
public interface API {
void doRun(Runnable runnable);
}
public class Client {
void doit(API api) {
api.doRun(new Runnable(){
public void run() {
snippetOfCode();
}
});
}
}
Welcome:
public class Client {
void doit(API api) {
api.doRun(runnable(() {snippetOfCode(); }));
}
}
Fonte do Exemplo: Nearl Gafter´s Blog
A proposta foi escrita por Gilad Bracha, Neal Gafter, James Gosling e Peter von der Ahé.
Fonte da notícia: Blog do Peter Ahé´s Weblog