本連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。初回は、ラムダ式の概要と利点、必要性、JDK 8のセットアップ、NetBeans、IntelliJ IDEA、Eclipseの環境構築について。
2014年3月18日に一般公開予定のJava SE 8へのバージョンアップでは、新たな表記法として「ラムダ式」が追加されます。このラムダ式を使うことによって効果を発揮する数々のAPIも追加されることになり、今回のバージョンアップはJavaを使う人にとって無視できないバージョンアップとなります。
しかしラムダ式は今までJavaプログラミングをやってきた人でも前提知識なしにソースだけを見て理解するのは難しい内容となっています。この連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。
JDK 8は2013年9月10日に開発者向けプレビュー版が公開され、2014年2月18日現在、Early Access版がリリースされています。
Javaのバージョン番号について、ところどころで1.8のように表記されている個所が出てきます。以前は1.3、1.4のようにマイナーバージョンがアップされていましたが、1.5のタイミングで5.0とメジャーバージョンを変えていくようになりました。そのため今回のラムダ式が使えるバージョンは8なのですが、Java内のフォルダー名や表記など至るところで「1.8」と表記されている個所があるので、混乱しないように注意してください。
ラムダ式とはJava SE 8で導入される新たな表記法です。またラムダ式はJavaコミュニティでは「クロージャ(Closure)」とも呼ばれています。このラムダ式は「関数型インターフェース」(1つのインターフェースに実装が必要なメソッドを1つだけ持つインターフェース)のメソッドを実装する際に使うことができます。
ラムダ式は下記の基本文法に従って、処理の実装を簡潔に記述できるようになります。
( 実装するメソッドの引数 ) -> { 処理 }
ラムダ式を取り入れるメリットの1つは、今まで関数型インターフェースの実装のために書いていた冗長なソースを簡潔に書けるようになる点です。
Java SE 8より前のバージョンでは、その関数型インターフェースを実装するのに「匿名クラス」を使うなどしなければいけませんでした。
ただ匿名クラスを使う場合、@Overrideしなければいけないメソッドを宣言したりするため、不要な行が増えたり、何層もの深いインデントができたりすることになり、ソースが読みづらくなってしまいます。
例えば、Buttonオブジェクトにそのボタンを押した際に「ボタンが押されました。」と標準出力するActionListenerを追加した場合、匿名クラスだと次のようになります。
Button button = new Button(); button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("ボタンが押されました。"); } });
これをラムダ式で書き換えると次のようになります。
Button button = new Button(); button.addActionListener( e -> System.out.println("ボタンが押されました。"));
このようにラムダ式を使うことによって簡潔に処理を書くことができるようになります。
Java SE 8では他にも、さまざまな新機能が導入されます。そして、それらの新機能の効果を発揮しやすいように、ラムダ式はデザインされています。
例えば、導入される機能の1つに「Stream API」と呼ばれるAPIが導入されます。このAPIは要素の集まり(ListやSetなど)に対して特定のものを抽出する場合や、それぞれの要素ごとの処理を行う場合に便利なAPIです。また、並列処理を行うためのAPIも用意されています。
ラムダ式は、このAPIに引数として渡す関数型インターフェースの処理を記述するのに適した表記法になっています。
String[] values = {"A001", "B001", "AB001", "BA001"}; List<String> list = Arrays.asList(values); list.stream().filter(e -> e.startsWith("A")) // 「A」で始まるもののみ取得 .forEach(e -> System.out.println(e)); // 取得した文字列を順に標準出力
Javaを使う人の中にはラムダ式を使わなくても今までのように匿名クラスを使った実装も行えるので、あえて「ラムダ式を知ろう」と思わない人もいるかもしれません。
しかし、今後ラムダ式が多くの人に使われるようになると、知りたい情報がラムダ式で書かれている場合や他の人と共同で作業する場合など、さまざまなところでラムダ式が出てくる可能性が高くなります。その際に最低でもラムダ式を読むことができないと、大きな問題になります。そのためにも、Javaを扱う人にとってはラムダ式についての知識は必要不可欠になるかと思います。
また今回のJava SE 8ではラムダ式を使うことを想定した新機能が多々追加されています。確かに、これらのラムダ式を使うことを想定した新機能に、あえて従来での記述を行うことは不可能ではありません。しかし開発効率も下がりコードも読みづらくなるため、ラムダ式で記述することを強く推奨される状況が今後出てくることが予想できます。
ここからはラムダ式を実際に使ってみるために、ラムダ式を使える開発環境を構築していきましょう。今回はWindows 7(64Bit版)の場合で紹介していきます。
下記のURLよりプレビュー版のJDK 8をダウンロードします。
対象のJDKのダウンロードが終わったら、ダウンロードしたファイルを実行してインストールを始めてください。この連載では特に何も変更せずデフォルトのまま進めてインストールしています。
2014年3月18日よりJDK8が正式リリースされています。次のURLから新しいJDKをダウンロードしてインストールしてください。
Copyright © ITmedia, Inc. All Rights Reserved.