こんにちは。
SI部の金巻と申します。
本日はJava 8 で導入された新機能の中から目玉、「ラムダ式」についてご紹介したいと思います。

目次

・今更聞けない?Java8のラムダ式について知ろう!

・ラムダ式とは?

・ラムダ式って美味しいの?

・ラムダ式は読めないとまずい?

・最後に

今更聞けない? Java 8のラムダ式について知ろう!

2014年3月18日(米国時間)、ついにリリースされたJava 8、新たな表記法として「ラムダ式」が追加されました。

(事情通の方からすると「やっとか!」と言った感じですが、、、)

またこのラムダ式を使う事によって効果を発揮するAPIも追加される事になり無視出来ないバージョンアップとなりました。

今回はそのラムダ式について

  • ラムダ式とは?
  • ラムダ式って美味しいの?
  • ラムダ式は読めないとまずい?

の3つのテーマを解説して行きます。

対象は「まだラムダ式を知らない人」向けの内容となっております。【所要時間:約五分】

それではラムダ式の世界にいってみましょう!

ラムダ式とは?

ラムダはLAMBDAと表記し、Javaコミュニティでは「クロージャ(Closure)」とも呼ばれています。※

 ※ アクセス権で考えれば関数単位なのでクロージャではないという意見もありますが

このラムダ式は「関数型インタフェース」のメソッドを実装する際に使う事が出来ます。

関数型インタフェースとは1つのインターフェースに実装が必要なメソッドを1つだけ持つインターフェースの事です。

たとえば関数型インタフェースとはこういうものです。

@FunctionalInterface
public interface Runnable {
  public abstract void run();
}

ただし、実装が必要なメソッドを1つ持つだけのインタフェースであれば

FunctionalInterfaceアノテーションの有無に関わらず関数型インタフェースとして取り扱います。

FunctionalInterfaceを付けると条件を満たしていない場合にコンパイルエラーになってくれるし

ひと目で関数型インタフェースを目的としていると分かりやすいので付けることを推奨します。

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

( 実装するメソッドの引数 ) -> { 処理 }

ラムダ式って美味しいの?

ラムダ式で何が変わるのか、このセクションではラムダ式の利点について紹介します。

簡素化された記述に変わります

ラムダ式に変わることで起こるメリットの1つはインタフェースの実装の為に書かれていたソースを簡潔に書けるようになるという点です。

どういうことかといいますとintの引数を1つ渡す以下のようなインタフェースがあったとします。

@FunctionalInterface
public interface IntFunc {
  public abstract int func(int x);
}

今までは

IntFunc intFunc1 = new IntFunc(){
  @Override
  public int func(int x){
    return x+x;
  }
}

これをラムダ式に書き換えると次の様になります。

IntFunc intFunc2 = (int x) -› {return x+x;};

圧倒的な短さです。

しかしこれだけで驚いてはいけません。
さらに型を省略することが出来ます。

IntFunc intFunc3 = (x) -›{return x+x;};

さらに引数が1つの場合のみですが括弧を、{}の中身が単文の場合は{}とreturnを省略できます。

IntFunc intFunc4 = x -› x+x;

intFunc2よりもさらに短いコードで同じ内容を書くことが出来ているのが分かると思います。
この様に簡潔に処理を書く事が出来る様になりました。

ラムダ式を使うことを前提に導入される数々のAPI

Java SE 8では他にも、さまざまな新機能が導入されます。今日のアプリケーション基盤はマルチコアを搭載したサーバ環境が主流になっています。

ラムダ式と合わせて追加された“Stream API”と呼ばれるAPIを使うことで、並列処理を行うプログラムをより簡潔に書けるようになりました。

日付操作用のAPIとして“Data and Time API”が追加され直感的で分かりやすい形でプログラムを書けるようになります。

ラムダ式は、これらのAPIに引数として渡す関数型インターフェースの処理を記述するのに適した表記法になっています。

ラムダ式は読めないとまずい?

Java8ではもちろん上記でご紹介したように従来の匿名クラスを使う方法が禁止されているわけではなくラムダ式を使わなくても実装を行えます。

ただ、今後多くの人がラムダ式を利用し始めた場合、他人のプログラムが読めないなんて事態に発展。

Javaを扱う人にとってラムダ式を書くことは出来なくても最低でも読めて理解出来ないと悲しいことになってしまうでしょう。

最後に

いかがでしたでしたか?

今回の説明でJava8のラムダ式について、そしてラムダ式がJavaエンジニアに与える影響が理解して頂けましたでしょうか?

次回はその他の新機能について解説出来ればと思います。