2012年4月4日から5日にかけて、日本で7年ぶりに開催されたJavaOne Tokyoのレポート。前編では、キーノートセッションを中心にレポートしました。後編では、Java SEとJavaFXに関するセッションを中心にレポートします。
Java SE
Java SEに関するセッションにはProject CoinなどJava SE 7に関するセッション、Project LambdaなどJava SE 8に関するセッション。また、それ以外のセッションに大別できます。ここでは、Java SE 8に関するセッションから、キーノートでも取り上げられたProject LambdaとProject Jigsawについてレポートします。
Project Lambda: To Multicore and Beyond
セッションを担当したのはOracleのDavid Holmes氏。Holmes氏はJavaの言語仕様であるJava Programing Languageの著者の1人で、言語仕様に深くかかわっているエンジニアです。
Project LambdaはJavaに新しい記法であるラムダ式を導入するためのプロジェクトです。ラムダ式を使うことで、メソッドを一つしか定義しないインタフェース(Functional Interfaceと呼びます)を実装する無名クラスを簡潔に表すことができます。
このラムダ式を導入する最も重要な目的は、Javaでより簡単にパラレル処理を記述するためにあります。ラムダ式を導入することによりタスクスケジューリングやスレッドの管理などを意識することなくパラレル処理を記述することができます。
ラムダ式を記述する例として、2011年に卒業した生徒の最高得点を求めることを考えます。卒業年次と点数を保持するStudentクラスがあるとした場合、最高得点を求める処理を従来の手法で記述すると次のようになります。
List<Student> students = ...
double highestScore = 0.0;
for (Student s: students) {
if (s.getGradYear() == 2011) {
if (s.getScore() > highestScore) {
highestScore = s.getScore();
}
}
}
リスト1のようにfor文を使用したイテレーションは外部イテレーションと呼ばれます。外部イテレーションは今までJavaを書いてきた人にはおなじみの形式です。しかし、ループの内部をパラレルに処理しにくいという欠点があります。