Click here to load reader
Upload
andreas-enbohm
View
1.121
Download
1
Embed Size (px)
DESCRIPTION
Will it be closures in Java 7 after all?
Citation preview
Project Lambda or
#()(”Project Lambda”)2010-04-29
April 12, 2023
Sida 2
Lambda Expressions (aka Closures)
“a first-class function with free variables that are bound in the lexical environment” - Wikipedia
HUGE debate about various closures decision earlierBGGA, CICE, FCM, …
Oracle seems to have decided this without JSR/JCP- most likely that this will be included in Java 7
Straw-Man Proposol- first-class functions - function types - lambda expression
Syntax and content not definite, may change
Complexity budget reached?
April 12, 2023
Sida 3
Lambda Expressions – Suggested Syntax
A new way of writing anonymous functions
A functions which take an int and returns its double
#() (42) //no args, returns 42
#(int x) (x+x)
April 12, 2023
Sida 4
Lambda Expressions
Complex expressions
#(int x, int y){ int z = expensiveComputation(x, y); if (z < 0) return x;
if (z > 0) return y; return 0;
}
April 12, 2023
Sida 5
Function Types
Every expression in Java must have a type, i.e. introduce function types
…and they could be invoked
#int() fortyTwo = #()(42); #int(int) doubler = #(int x)(x + x);
assert fortyTwo() == 42; assert doubler(fortyTwo()) == 84;
April 12, 2023
Sida 6
Functions as arguments
Methods can take a function as an argument
public int[] map(int[] a, #int(int) fn) {
int[] b = new int[a.length];
for (int i = 0; i < a.length; i++)
b[i] = fn(a[i]);
return b;
}
April 12, 2023
Sida 7
SAM types
Interfaces with just one method (SAM)
Thread th = new Thread(new Runnable() {
public void run() {
doSomeStuff();
doMoreStuff();
} });
Thread th = new Thread(#(){
doSomeStuff();
doMoreStuff(); } )
April 12, 2023
Sida 8
Variable Capture
shared int count = 0;
Collections.sort(data, #(String a, String b){
count++;
return a.length() - b.length()});
System.out.println(count);