Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Project Lambda Rising

Yuuki Sumida
November 03, 2012
160

Project Lambda Rising

Yuuki Sumida

November 03, 2012
Tweet

More Decks by Yuuki Sumida

Transcript

  1. プロジェクト・ランバダ・ライジング 2012.11.03(Sat)

  2. プロジェクト・ランバダ・ライジング プロジェクト・ラムダ・ライジング 2012.11.03(Sat)

  3. ドーモ、 ドーモ、Java Javaプログラマ=サン。 プログラマ=サン。 – @razon @razon – 岡山 岡山Java

    Javaユーザ会 ユーザ会/ /天領倉敷 天領倉敷Scala Scala – もじゃもじゃしていました もじゃもじゃしていました。
  4. Agenda • ラムダ式とは • Project Lambdaとは • Project Lambdaを体感しよう

  5. ラムダ式とは ラムダ式とは

  6. ラムダ式とは • まず最初に、ラムダ計算の話はしません • 下手なことを話すとアバーッ! • アイエエエエ! モヒカン!?モヒカンナンデ!? λx.x

  7. ラムダ式とは • 無名関数 • 一度だけ使う関数を記述するのに使う

  8. ラムダ式とは • 関数の引数として渡す関数(高階関数) • Callbackとか

  9. Project Lambda Project Lambdaとは とは

  10. Project Lambdaとは • JSR 335 (Lambda Expressions for the Java

    Programming Language) – Lambda Expressions – Method Reference – Interface Default Implementation
  11. Project Lambdaとは • 単一メソッドのInterfaceを簡単に インスタンス化するためのSyntax sugar // Before list.stream().filter(new Predicate<Integer>()

    { public boolean test(Integer i) { return 100 < i; } }); // After list.stream().filter(i -> 100 < i);
  12. Project Lambdaとは • Not lexical closure var i = 5

    val f = (x: Int) => x + i println(f(5)) # 10 i = 10 println(f(5)) # 15
  13. Project Lambdaとは • Not function type // Interface“Predicate”を作成する必要がある Predicate<String> p

    = s -> 2 < s.length();
  14. Project Lambda Project Lambdaを を 体感しよう 体感しよう

  15. インストール • http://jdk8.java.net/lambda/ • IDE – Netbeans 8 Nightly Builds

    with experimental Lambda support (http://bertram2.netbeans.org:8080/job/jdk8lambda/lastSuccessfulBuild/artifact/nbbuild/) – IDEA 12 EAP with experimental Lambda support (http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP) – Eclipse?ナンコラー!スッゾコラー!
  16. 使いかた // Before list.stream().filter(new Predicate<Integer>() { public boolean op(Integer i)

    { return 100 < i; } }); // After list.stream().filter(i -> 100 < i);
  17. Syntax • Lambda Expressions (T1 p1, T2 p2, T3 p3...)

    -> {expression} // ex1 I x = (int a, int b, int c) -> {return a + b + c;}; // ex2 I x = a -> a + 1;
  18. Syntax • Method Reference public interface I { public int

    m(String s); } I i1 = s -> s.length(); I i2 = String::length;
  19. Syntax • Interface Default Implementation public interface I { public

    int m1(int a, int b, int c); public int m2() default M2.m2; public int m3() default { return 1; }; } public class M2 { public static int m2(I i){ return 0; } }
  20. 使用例 • コレクションの高階関数 List<Integer> list = ...; list.forEach(i -> {

    System.out.println(i); });
  21. 使用例 • コレクションの高階関数 List<Integer> list = ...; list .stream() .filter(i

    -> Math.abs(i) < 100) .map(i -> String.valueOf(i)) .reduce((s1, s2) -> s1 + s2);
  22. 参考 • ニンジャスレイヤー ネオサイタマ炎上1 – 大好評発売中!

  23. 参考 • ニンジャスレイヤー ネオサイタマ炎上2 – 2012/11/30(Fri)発売!

  24. サヨナラ! サヨナラ!