レコメンドチームの高橋昌生です。
さて、3/18(日本時間3/19)、Java8がリリースされました。
ナビプラスではフロントのアプリはPHPやRuby(Rails)といったスクリプト言語で開発していますが、検索処理のためのSolrや、バッチ処理を高速化したい箇所をJavaで書いたりと、Javaの適用範囲も結構あり、Javaの進化については気になるところです。
というわけで、Java8リリースを記念した本イベントに行ってきました。
祝 Java SE 8 正式リリース
寺田佳央さん(@teraoyoshida)による発表。Lambda, StreamAPIやDate and Time API等の注目度の高い機能以外の変更点等についてフォローしていただける発表でした。特にVMのパフォーマンス改善、クラスフォーマットの変更、メモリ使用量の削減などのプラットフォームとしての改善とCompactプロファイルは気になりました。
徹底解説!Project Lambdaのすべて リターンズ
吉田真也さん(@bitter_fox)による発表。まだ大学生というのだから驚きです。
発表内容は、Java8で一番注目されている新機能、Lambdaについて。
- Lambda, StreamAPIは、マルチコアCPUに対応するための並列プログラミングを容易にするための言語拡張。
- 元々並列処理のために導入されたが、様々な場面で利用可能。
- SequencialStream(直列処理)とParallelStream(並列処理)があり、parallel(), sequential()を呼ぶだけで使い分けが可能。
- 中間操作(Streamを返す処理)と終端操作(forEachやreduceなどStreamを返さない処理)を組み合わせて記述し、中間操作は終端操作を呼ぶまで処理が遅延される。
StreamAPIの導入によって、カジュアルに並列処理を書くことができるようになりそうで期待できます。また、これまでループを記述していたところの大部分をStreamAPIによる記述に置き換えることができそうでコードがすっきりしそうです。
願わくば、StreamAPI、Lambda禁止なんていうコーディング規約が日本の開発現場に蔓延しないことを・・・。
Brand new Date and Time API
蓮沼 賢志さん(@khasunuma)による発表。Date and Time API(JSR-310)だけではなく、そこに至るまでの日付、時刻周りの詳しいお話について、非常に参考になりました。Date and TIme APIは非常に使いやすそうではありますが、他のライブラリがどれぐらいで対応してくるか、というところも気になります。これからJava8、Java9、と進んでいく中で、いずれ既存のjava.util.Date等からこちらへと主流が移っていくことでしょう。
null書いたら負け!Java8コーディング作法
きしだのはてなでおなじみの、@kisさんによる発表。
Java8で導入されたOptionalに関する話とnullを返さないようにするコーディング作法に関する話でした。
OptionalはScalaでいうOption、HaskellでいうMaybeのようなもので、失敗する可能性のある処理を明示するための型、といったものだそうです。Java8世代のJavaではnullを返したら負け、nullを使うのは自分がコントロール出来る範囲だけに留めよう、というような内容でした。
さて、JavaでもScalaのOptionちっくなものが導入されたのは嬉しいのですが、どうせなら値がある場合とない場合をパターンマッチですっきり書きたくなります・・・。Javaにもパターンマッチがほしいです。
JavaFX – GUI by Illusion
櫻庭 祐一さん(@skrb)による発表。
自分は仕事でWeb以外のGUIアプリを書くことは無いんですが、JavaFXはSwingと比べてもの凄く良くなってますね!これならJavaでGUIアプリ書こうという気になります。また、RoboVMを使うとJavaFXで書いたアプリをiOS上で動かすこともできるらしく、試してみたくなります。
from old Java to modern Java – reloaded
谷本 心さん(@cero_t)による発表。
Java8時代のコーディング作法について。Java8から導入されたStreamAPIによって、コーディングスタイルはこれから大きく変わる(はず)。StreamAPIで書かれたコードをrejectしてforやwhileで書き直させるような老害にならないように、日々学び続けたいと思います。
Raspberry Pi on Java ショートアップデート
太田 昌文さん(@masafumiohta)による発表。
Raspberry PiでもOracle Javaが簡単に動くようになっているというのは知りませんでした。
ところで最近社内でもRaspberry Piで遊んでる人が居て楽しそうにしてます。
感想
個人的には実はJavaよりScala派で、Lambda、StreamAPI、Optional型などは元々Scalaに同じような物があるので凄く驚くような物ではないのですが、本家Javaにこれらが持ち込まれたことは、Javaのコーディングスタイルが大幅に変わりうる大きな進化であると感じました。
Java8、5年後ぐらいには使えるといいな、などと冗談混じりに言ってましたが、検証をして特に互換性に問題がなければ思い切ってもっと早めに実戦投入してみてもいいんじゃないかな、と思います。