Agendado para ser lançado em 2013, Java 8 incluirá suporte a idiomas para funções lambda. Embora a especificação ainda está em fluxo, lambdas já estão implementados no JDK 8 binários.
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ui.dazzle(e.getModifiers());
}
});
Duran-san. não estou vendo lambdas (que exigem o novo operador “->” ) no exemplo que você deu. Acho que você queria dizer:
// Código em Java 1.2 e posterior
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ui.dazzle(e.getModifiers());
}
});
// Código equivalente em Java 8 (Lambdas)
button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );
Referência: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html
Esse operador “->” é chamado de operador seta ?
O que ele faz ?
[quote=entanglement]Duran-san. não estou vendo lambdas (que exigem o novo operador “->” ) no exemplo que você deu. Acho que você queria dizer:
// Código em Java 1.2 e posterior
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ui.dazzle(e.getModifiers());
}
});
// Código equivalente em Java 8 (Lambdas)
button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );
Referência: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html
[/quote]
“Boa observação, a gramatica muda como uma expressão matemática que foi aprimorada”
[quote=Lucas_Soares]Esse operador “->” é chamado de operador seta ?
O que ele faz ?[/quote]
Não importa muito o nome do operador (devem dar um nome oficial para ele mais tarde - nesse documento ele é realmente chamado de “arrow”, mas acredito que eles acabem chamando de “lambda” ou outra coisa mais cerimoniosa).
O que ele faz é o seguinte: define um método que pode ser chamado sem você ter de criar uma classe anônima e outras coisas burocráticas (semelhante a um “anonymous delegate” do C# ou um “lambda” do C++11). Na verdade, ele até aceita algumas coisas mais complexas. Por exemplo, você não precisaria definir certas variáveis locais do método que incorpora esse código como “final” (o que é o caso em classes anônimas).
Dê uma olhada nos exemplos que estão disponíveis no documento que deixei apontado ( http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html ).
Como provar Lambda ? button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );
Ta ficando lindo…é só esperar o lançamento para começar a usar 
Scala feelings :shock:
em scala se usa muito o =>
[code]public interface NCopies{
public List getCopies(T seed, int num);
}
//This code will give a compilation error,
//As the lambda is meaningless without a context
( (seed, num) -> {
List list = new ArrayList<>();
for(int i=0; i<num; i++)
list.add(seed.clone());
return list;
}).getCopies(new CloneableClass(), 5);
However, the following would be perfectly alright, because there is an assignment context for the lambda.
NCopies nCopies = (seed, num) -> {
List list = new ArrayList<>();
for(int i=0; i<num; i++)
list.add(seed.clone());
return list;
};
nCopies.getCopies(new CloneableClass(), 5);[/code]
Duran-san (se quiser seu nome em japonês, ele fica “ムルシオ・ヅラン”), poderia explicar o que você está citando do blog?
Pelo que imagino, ele está explicando que uma expressão lambda não existe sozinha mas depende de ser atribuída a uma variável ou então passada como parâmetro para algum método. É isso mesmo?