ブロックチェーン・AI・システム開発の株式会社INDETAIL

Java9リリース記念!今ここで、Java8の新機能を振り返ろう【前半】

2017.12.10
suzy

INDETAIL Advent Calendar 2017 10日目の記事です。

今年は、プログラミングの機会は(業務上)少なかったものの、好きな言語・Javaの案件に一年間携わることができました。

そんな2017年の締めくくりとして、Javaをテーマとした記事を書きたいと思います。

今回のテーマについて

今年9月には待望のJava9が正式リリースされましたが、まだまだ現場では、Java8で開発・運用されている案件が多いと思います。そこで今回は、Java8の主な新機能を、あらためて振り返ってみます。現場で何か新しいことに取り組むキッカケ作りができたら嬉しいです。(私も使いこなせるよう頑張ります!)

Oracleのサイトから以下の機能をピックアップして、2回に分けてお送りします。

12月10日(本記事)
・ラムダ式
・デフォルトメソッド

12月24日
・型アノテーション
・型推論の強化
・メソッド、パラメータのリフレクション

また、覚えておくと何かと現場で役立ちそうな「Optional」「Date and Time API」についても触れる予定です。

ラムダ式

Java8の目玉機能と言う声も高いラムダ式。Java8で「関数型インタフェース」の実装を簡単に実現するのが、このラムダ式です。
関数型インタフェースとは、抽象メソッドが1つだけあるインタフェースを指します。

以下は実装例:

@FunctionalInterfaceアノテーションは必須ではなく、条件を満たせば自動的に関数型インタフェースと認識されます。ただし指定しておくと、コンパイル時に条件を満たさない場合はコンパイルエラーとなって教えてくれるため、問題がなければ指定しておいた方が良いかと思います。

さて、この関数型インタフェースを実装する場合、今までのJavaでは以下のように書く必要がありました。

ラムダ式を用いると、以下のように少し簡潔に実装することがきます。

この例だけでは、記述量が少し減る程度で、あまりラムダ式のメリットを感じ取ることができないかもしれませんね。

Javaのラムダ式では、できるだけ記述をシンプルにして、本来集中すべき「処理」そのものに注力できるようにと、色々な省略記法が用意されています。また、同じくJava8で追加された「Stream API」との組み合わせで、より本領を発揮するようになります。

構文を覚える前に、関数型プログラミングの考え方そのものを学習するのも良いかと思います。

デフォルトメソッド

Javaはインタフェースに実装を持つことができませんでしたが、defaultキーワードを指定すると、インタフェース自体に処理を定義できるようになりました。

以下は実装例:

実装クラス側は、デフォルトメソッドの定義は必須ではありません。必要に応じてオーバーライドして処理を上書きすることができます。

Optional

最後にご紹介するのは、Java8で新たに追加されたクラスjava.util.OptionalAPIリファレンスには以下のように記載されています。

null以外の値が含まれている場合も含まれていない場合もあるコンテナ・オブジェクトです。

これでは少し分かりにくいのですが、ある値をラップして、"その値はnullの可能性がある"、という事を示すためのクラスがOptionalです。

例えば以下のロジックを実行した場合、必ずNullPointerExceptionが発生します。これはgetNameメソッドがnullを返す可能性があることを、呼び出し元が意識していないことが原因のひとつと考えられます。

ここでgetNameメソッドの戻り値の型をOptionalに変更します。

こうすると、呼び出し元は「getNameメソッドの戻り値はnullの可能性があるので、nullの場合の振る舞いを決めよう」という点を意識させられます。これにより、プログラムの堅牢性が高められることが期待されます。
ちなみに、サンプルで使用しているorElseは、値がnullの場合のデフォルト値を指定できるメソッドです。

まとめ

Java8の新機能の中から「ラムダ式」「デフォルトメソッド」「Optional」をご紹介しました。皆さんにとって、普段なじみの深いものはあったでしょうか。個人的には、関数型プログラミングの理解をもう少し深めたいと考えています。

次回もJava8の新機能をテーマに執筆予定です。どうぞお楽しみに。

suzy Kawasuji Marie

INDETAIL には珍しい文系出身。初心者向け Raspberry Pi ネタと、色々な開発 tips を書いています。最近のおすすめマンガは「恋は雨上がりのように」。心が洗われます。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。