javaプログラマーは覚えておくべき【java se 8】の特徴と変化内容まとめ

javaプログラマーは覚えておくべき【java se 8】の特徴と変化内容まとめ

java se 8がリリースされ、そこに追加された機能は、従来のjavaから大きく変化しました。

これによって従来のjavaを好んで使っていた人も、ある程度は新しい知識を身につけてはいかなくてはならなくなったのです。

正直従来の機能に慣れていた人にとっては、新要素なんて追加しない方がやりやすい…なんて思う人も多いのでは?

しかし、そう思うのは新しい要素に付いてまだ理解していなく、漠然とした不安が多いからでしょう。

ここでは、不安を解消するためにも、いったいどんな機能が追加され、これからどういう風にjavaは変わっていくのかについて、できる限り専門用語を抜きに簡潔に説明していきます。

Java se8で何が変わったか?バージョンアップの内容と7つの変更点

2014年3月から、javaはse8へとバージョンアップし、さまざまな新要素が追加されました。

Java se8の変更点と特徴とは

簡潔に変更点を箇条書きしてみると

・ラムダ式に対応
・Stream APIの追加
・Date and Time APIの追加
・タイプ・アノテーションへの対応
・新JavaScriptエンジン「Nashorn」の導入
・新GUIフレームワーク「JavaFX 8」の追加
・「コンパクト・プロファイル」の導入

などが新しい追加要素となります。

さて、この中でもjavaを使っている人にとって、「ラムダ式」の追加は念願とも言える新要素と言えるでしょう。

ラムダ式 はC#などではすでに実装されている物なので、人によっては「ようやく追加されたのか」とあきれるくらい、長い間に渡って実装される事が求められていた形式です。

C#などのプログラミング言語では既に導入されていたラムダ式ですが、Java 8からJavaにも実装されるようになりました。ラムダ式の特徴は、メソッドを変数のように扱える点にあります。
参考:ラムダ式とは? INTERNET ACADEMY

なぜそんなに遅れてしまったのかというと、ラムダ式はjavaのオブジェクト指向言語と相性が悪いため、長年実装に手間取ったのが原因なのだと言えそうです。

しかし今回、そんなjavaの構造とうまく折り合う方法を見つけたので実装に踏み切った、という形になるでしょうか。

さて、いままでjavaにしか触れてなかった人、またプログラミングを始めたばかりの人からしたら、いきなりラムダ式と言われても、「それっていったい何なの?」と思ってしまうかもしれませんね。

と言う訳で、ラムダ式から説明していきましょう。

Java se8の変更点①ラムダ式を採用

ラムダ式は、「関数型インタフェース」を実装する際、従来よりもはるかに簡略化して書ける方式であり、今回se 8へのバージョンアップに置いて、最大の変更点であり売りであると言えるでしょう。

まずそもそも、「関数型インタフェース って何?」という人に簡単に説明しますと、関数型インタフェース とはおおまかに言って「入力に対し、ただひとつの出力を持ったもの」という事になります。

引数にたいして、戻り値を持ったもの、と言い換えてもいいかもしれません。もっと簡単にいいますと、数値を入れたら計算をおこなってくれて、計算された値を返してくれるもの、という事になります。

たとえばxとy、ふたつの引数があり、それを合算して引き渡したいとします。ラムダ式なら、以下のように記述するだけでOKになります。


(int x, int y) -> (return x + y;)

従来のjavaでの記述に比べ、かなり簡略化されてますね。しかも、ここからさらに、型の宣言まで省略して記述する事が可能です。そしてまたさらに、一行でのコード記述の場合に限って、もうひとつ省略技が使えます。なんと戻り値のかっこを書かなくとも良いのです。つまり、


(x, y) -> return x + y;

ここまで省略してもプログラムは動いてしまう、という事です。従来の書き方に比べ、大幅に記述する手間が省け、読みやすくなったと言えます。

正直いままでラムダ式を見てこなかった、または使ってこなかった人にとって、このあまりに簡素なコード記述はしっくりとこなく、はじめは違和感を感じて馴染めないかもしれません。

それに、少しばかり覚えなければいけない事も増えてしまいますしね。今更新しい事を覚えるのは手間と言えば手間でしょう。

とはいえラムダ式にはコード記述の冗長化を防ぎ可読性を高めるという大きなメリットがありますし、自分が使わなくとも他人は嫌でも記述する、そして今回ラムダ式とおなじく新しく追加された機能。

「Stream API」はラムダ式を前提とした物のため、これからもjavaを使い続けているのであれば、覚えておくに越した事は無いと言えるでしょう。

Java se8の変更点②Stream APIの追加

前述したように、「Stream API」はラムダ式とセットと考えてください。

簡単に言うと、Stream API は配列やCollectionなどの集合体を用いる時に、従来よりも簡単に記述をおこなう事ができます。

たとえば従来書いていたfor文は、Stream APIによってすべて簡略化する事が可能です。Stream APIとラムダ式を有効活用する事によって、読みやすくデータ操作の変更も従来よりも大分楽になります。

Java se8の変更点③Date and Time APIの追加

従来のjavaでは、日付や時間をあつかう時にDateとCalendarなどのクラスを使わなければなりませんでした。

しかし「Date and Time API」の追加によって、より直感的で分かりやすく簡単であり、型としても安全である記述がおこなえるようになりました。

LocalDateTime ではタイムゾーンなしの日時を、ZonedDateTimeタイムゾーンありの日時、Instantではエポック秒の日時をあつかえます。

Date and Time APIでは日付と時刻の表記に関する国際規格であるISO8601をベースとしていて、従来のUNIX時刻ベースのDateとCalendarから、大幅な変更に踏み切ったと言えるでしょう。これもラムダ式とおなじく、時代とともに変わっていく世の中のメインストリームにのる流れと言えるでしょう。

Date And Time APIは作成後に状態を変えられない(イミュータブル)ので、その事によってプログラムの安全性が高まるのもひとつの大きなメリットです。

Java se8の変更点④タイプ・アノテーションの対応

従来のjavaのアノテーション(@から始まるコメントであり、通常のコメントと違い、コンパイル時にスペルミスやバグチェックをおこなってくれる)はクラスやメソッドの宣言にたいしてのみおこなえるものでした。

Java se8ではタイプアノテーションの対応によって、変数の型やジェネリクス型パラメータにもアノテーションを書く事が可能になりました。

タイプアノテーションとライブラリを併用する事によって、今までよりもテスト時のバグチェックがより簡単になり、コンパイラだけのチェックに比べて精度が上がります。

ただ、使いすぎるといわゆる自分にしか分からない、読みにくいプログラムになる危険性もあるので、それを注意したうえで使うと良いでしょう。

Java se8の変更点⑤新JavaScriptエンジン「Nashorn」の導入

se8から、従来までのJavaScriptエンジンである「Rhino」から、「Nashorn」と呼ばれる新しいエンジンに切り替えられました。

Nashornに変更されて事によって、プログラム実行時のパフォーマンスが大きく向上されていて、従来よりも計量かつ高速にJavaScriptを実行する事ができるようになりました。

Java se8の変更点⑥新GUIフレームワーク「JavaFX 8」の追加

従来のjavaにはSwingというGUIがすでにありましたが、新バージョンであるse8からは、JavaFX8がそれに変わる事になります。

と言ってもse8でSwingが使えなくなる、という訳ではなく、FX8と共存していく事になります。併用して利用できるようになった事で、たとえばJavaFXのアプリケーションに、Swingのコントロールを組み込む、なんてこともできるようになりました。

さらにJavaFX8にはJavaFX 3Dという3D表現に適した機能や、印刷用のライブラリなども持ち合わせているので、クライアント側にとってより便利なアプリケーションの開発をおこなう事が可能です。

そしてEmbeddedテーマによって小型デバイス用のアプリケーションを軽快に動作するように作る事ができますし、キーボードではなく、タッチ操作に適した物を簡単に制作する事が可能となっています。つまりはスマートフォンなどにも JavaFX 8の利点を生かしたアプリ制作が可能になってくる、という事です。

Java se8の変更点⑦コンパクト・プロファイルの採用

「コンパクト・プロファイル」が導入された事により、サブセット化しストレージ容量の少ない小型デバイスなどでも動作するようになります。コンパクト・ファイルは三段階、10 MB、17 MB、24 MB程度のメモリリソースを想定した物が用意されています。

Java se8の変更点と特徴まとめ

従来と同じようにjavaを使っていきたい人にとっても、ラムダ式のように覚えておいて損は無い、覚えなければ他の人のコードが読めないようなものもjava se 8には追加されているので、新しい事を面倒と思う事無く、ささっと軽くでも理解しておく事をおすすめします。

新しく加えられた機能を使いこなす事により、従来よりも読みやすく、エラーを未然に防げるプログラムを組む事ができますし、パソコン以外の様々なデバイスが登場するであろう将来にも対応する事ができるようになってきます。

これから先へと対応するためにも、軽く頭に入れておいていただけるとうれしいです。