連載
» 2014年02月18日 18時00分 UPDATE

Java 8はラムダ式でここまで変わる(1):初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築 (1/4)

本連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。初回は、ラムダ式の概要と利点、必要性、JDK 8のセットアップ、NetBeans、IntelliJ IDEA、Eclipseの環境構築について。

[長谷川智之,株式会社ビーブレイクシステムズ]

もう無視できないJava 8のバージョンアップ

 2014年3月18日に一般公開予定のJava SE 8へのバージョンアップでは、新たな表記法として「ラムダ式」が追加されます。このラムダ式を使うことによって効果を発揮する数々のAPIも追加されることになり、今回のバージョンアップはJavaを使う人にとって無視できないバージョンアップとなります。

 しかしラムダ式は今までJavaプログラミングをやってきた人でも前提知識なしにソースだけを見て理解するのは難しい内容となっています。この連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。

 JDK 8は2013年9月10日に開発者向けプレビュー版が公開され、2014年2月18日現在、Early Access版がリリースされています。

コラム「ややこしいJavaのバージョン番号」

Javaのバージョン番号について、ところどころで1.8のように表記されている個所が出てきます。以前は1.3、1.4のようにマイナーバージョンがアップされていましたが、1.5のタイミングで5.0とメジャーバージョンを変えていくようになりました。そのため今回のラムダ式が使えるバージョンは8なのですが、Java内のフォルダー名や表記など至るところで「1.8」と表記されている個所があるので、混乱しないように注意してください。


Java 8のラムダ式(LAMBDA)とは?

 ラムダ式とはJava SE 8で導入される新たな表記法です。またラムダ式はJavaコミュニティでは「クロージャ(Closure)」とも呼ばれています。このラムダ式は「関数型インターフェース」(1つのインターフェースに実装が必要なメソッドを1つだけ持つインターフェース)のメソッドを実装する際に使うことができます。

 ラムダ式は下記の基本文法に従って、処理の実装を簡潔に記述できるようになります。

( 実装するメソッドの引数 ) -> { 処理 }
※引数は複数でも引数なしでも可能

Javaラムダ式の2つのメリット

【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("ボタンが押されました。"));
ラムダ式の場合

 このようにラムダ式を使うことによって簡潔に処理を書くことができるようになります。

【2】ラムダ式を使うことを前提に導入される数々のJava SE 8の新機能

 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));  // 取得した文字列を順に標準出力
Stream APIの使用例

Javaラムダ式の必要性

 Javaを使う人の中にはラムダ式を使わなくても今までのように匿名クラスを使った実装も行えるので、あえて「ラムダ式を知ろう」と思わない人もいるかもしれません。

 しかし、今後ラムダ式が多くの人に使われるようになると、知りたい情報がラムダ式で書かれている場合や他の人と共同で作業する場合など、さまざまなところでラムダ式が出てくる可能性が高くなります。その際に最低でもラムダ式を読むことができないと、大きな問題になります。そのためにも、Javaを扱う人にとってはラムダ式についての知識は必要不可欠になるかと思います。

 また今回のJava SE 8ではラムダ式を使うことを想定した新機能が多々追加されています。確かに、これらのラムダ式を使うことを想定した新機能に、あえて従来での記述を行うことは不可能ではありません。しかし開発効率も下がりコードも読みづらくなるため、ラムダ式で記述することを強く推奨される状況が今後出てくることが予想できます。

JDK 8のインストールと環境設定

 ここからはラムダ式を実際に使ってみるために、ラムダ式を使える開発環境を構築していきましょう。今回はWindows 7(64Bit版)の場合で紹介していきます。

ダウンロードとインストール

 下記のURLよりプレビュー版のJDK 8をダウンロードします。

 対象のJDKのダウンロードが終わったら、ダウンロードしたファイルを実行してインストールを始めてください。この連載では特に何も変更せずデフォルトのまま進めてインストールしています。

JDK 8正式版のリリース(2014年4月7日追記)

 2014年3月18日よりJDK8が正式リリースされています。次のURLから新しいJDKをダウンロードしてインストールしてください。

java8_01_01.jpg

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。