8

Click here to load reader

Project Lambda - Closures after all?

Embed Size (px)

DESCRIPTION

Will it be closures in Java 7 after all?

Citation preview

Page 1: Project Lambda - Closures after all?

Project Lambda or

#()(”Project Lambda”)2010-04-29

Page 2: Project Lambda - Closures after all?

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?

Page 3: Project Lambda - Closures after all?

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)

Page 4: Project Lambda - Closures after all?

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;

}

Page 5: Project Lambda - Closures after all?

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;

Page 6: Project Lambda - Closures after all?

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;

}

Page 7: Project Lambda - Closures after all?

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(); } )

Page 8: Project Lambda - Closures after all?

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);