Your SlideShare is downloading. ×
Project Lambda - Closures after all?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Project Lambda - Closures after all?

1,106
views

Published on

Will it be closures in Java 7 after all?

Will it be closures in Java 7 after all?


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,106
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Project Lambda or #()(”Project Lambda”) 2010-04-29
  • 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 earlier BGGA, 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?
  • 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)
  • 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; }
  • 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;
  • 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; }
  • 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(); } )
  • 8. Variable Capture shared int count = 0; Collections.sort(data, #(String a, String b){ count++; return a.length() - b.length()}); System.out.println(count);