JavaDayTokyo2014 基調講演(JavaSE8) レポート

JavaDayTokyo2014

本日開催された、Oracle社主催のJavaDayTokyo2014に参加してきました。
Openingの基調講演の序盤(どれだけ序盤なんだw)のイベントレポートをします!

f:id:takahiro-f:20140522100421j:plain

今年で2回目の開催となるJava Day Tokyoに参加してきました。
毎年会社に参加させてもらっていて、大変感謝していますw

本日のイベントはJava SE8のロンチイベントとも位置づけられ、
Java SE8の話を中心に、Javaの最新の情報を得ることが出来ます。

f:id:takahiro-f:20140522101629j:plain

Java Day Tokyo 2014の規模は、

  • 22 Sessions
  • 2000 Registrants

22のセッション、2000名を超える参加者が集まる

国内のJavaカンファレンスとしては最大規模のものになります。
恒例として、カンファレンスは基調講演から始まります。
下記に基調講演のレポートの一番初めに話があった、
JavaSE8についての発表のレポートを記載します!

Java8日本語document公開!

でもその前に。
これは最初にサプライズ?発表がありました。
Java8の日本語ドキュメントがついに公開されたようです。
やっぱり母国語のドキュメントがあるのは助かりますね。

http://docs.oracle.com/javase/jp/8/

f:id:takahiro-f:20140522102036j:plain

JavaSE8のリリースについて

今年も、Nandini Ramaniさんが発表されました。

f:id:takahiro-f:20140522100716j:plain

様々なセッションで繰り返し述べられていますが,

  • Java8になって、SEとMEの差分はほぼ無くなり、一つのJavaとしてひとくくりに出来るようになってきた。

(さらっとλの所が少し違うとか言ってたのが気になりましたw,ME使ったこと無いので分かっていませんが。)
f:id:takahiro-f:20140522101318j:plain
f:id:takahiro-f:20140522101435j:plain

  • IoT(Internet of things)というキーワードが繰り返し述べられていました。最近のキーワード。
  • 同じく組み込みの話を意識して、compact profileについても取り上げていました。

f:id:takahiro-f:20140522101917j:plain

Java SE8の新機能の3本の柱

Java SE8の新機能の3本の柱として、下記を挙げていました。
Lambda expressions,Default methods, Stream API
Oracleでは、Java8の一つの大きな目的として、

並列処理のような複雑な処理を、より簡潔に、より簡単に作れること。

を挙げています。
そこに結びつくのが、Stream APIであり、
Stream APIを実装するにあたって、前者2つの機能が必要であったという話です。

Lambda expressionはそこだけ取れば、expressionと言われるように、あくまで表現の話です。
Lambda expressionのおかげで、無名クラス、を使う障壁が減り、
Javaは関数型プログラムの第一歩を踏み出すことができました。

Lambdaが何かということは、
日本語でも既に数多くのブログで有識者の皆様が沢山記事を書いて下さっています。
興味ある方は、調べてみてみてください。

今本当になんとなく、なんとなくだけど分かって貰う為に一言で書くならば、

ラムダ式 (引数) -> 処理

と言っておきます。(全ての真実ではないですが、読んでなんとなく意味を分かる為の表現です)

    Function<String,String> sample = (s) -> "your argument is " + s ; //(引数) -> 処理
    System.out.println(sample.apply("test"));

出力:your argument is test

Default methodは大きな変更で、
既存のインタフェースの概念を変える可能性を持っています。
今まで、実装を持てなかったインタフェースが実装を持てるようになるということで、
インタフェースの継承の概念が変わってきます。

public interface DefaultMethodInterface {
    default public void show(){
        System.out.println("this is default method of show()"); //インターフェースに実装が出来る!
    }
}

そしてその2つを利用してStream APIが出来ました。
そのStream APIを駆使することで、
並列処理を簡潔に実装でき、よりパフォーマンスの良い実装ができます。

        Integer max = students.stream()
                .filter(s -> s.getGradYear() == 2011)
                .map(s -> s.getScore())
                .reduce(0, Math::max);
        System.out.println("max score is " + max);

        //並列
        Integer max = students.parallelStream()
                .filter(s -> s.getGradYear() == 2011)
                .map(s -> s.getScore())
                .reduce(0, Math::max);
        System.out.println("max score is " + max);

最初にJava8が発表されたときは、確かにLamndaに脚光が浴びていて(今でも浴びていますが)
自分が全然何がなんだか分かっていないこともあって、Lambdaを理解することがJava8を理解する上でもメインと思っていた時もありました。
ただ、実際にOpenJDKを使って、Lambdaを使ってみると、
「これは自分のアプリケーションだとどういう所で使うんだろう」
「どう使うんだろう」
という疑問が湧いてくると思います。(自分はそうでした。)
そのとき、やっとこの流れが理解することができました。

Java8 ≒ Lambda expression

ともしも感じている人がいたら。

「何のためのLambdaなのか」

ということを考えると、理解が深まると思います。(自分もまだ全然理解が足りていませんが)

Nashorn

次に、Nashornの話もありました。
Nashornも今回比較的注目を集めている機能で、
新しいJavascriptエンジンを示しています。
(※今までもRhinoというエンジンがありました)

今回からJavascriptがちゃんとバイトコードになる。
という点を強調されていました。
Nashornについては、JavaDayTokyoでNashornがテーマになった講演に参加する為、
そちらのFBで詳しくまとめようと思います。

今後のJava

また、Java6 - Java7で5年もの歳月があった為、
少し気が早いかの印象すら覚えますが、
Java9で機能として含まれると言われている、
Project sumatraについても少し話しがありました。

実際、Java9のOpenJDKは既にあり、BugFixが始まっていると。
そして何より、2年後にはもうJava9が出ます。
Java8を実際のアプリケーションで使い知識を貯めていく一方で、
Java9の最新情報もこれからはキャッチしていく必要があるなと改めて感じました!

f:id:takahiro-f:20140522102242j:plain