netbeans ide 8を使用した - oracle.com · oracle.com/javamagazine ///// may/june 2014 java tech...

4
ORACLE.COM/JAVAMAGAZINE ///////////////////////////////// MAY/JUNE 2014 JAVA TECH 27 COMMUNITY JAVA IN ACTION ABOUT US blog //java architect / 記事では、開発者が Java SE 8 の関数型機能を利用 できるようにする、NetBeans IDE 8 の便利な新規ツールを 紹介します。Java SE 8 では、 Java 言語機能としてラムダ式 が導入されました。Java のラ ムダ式は図1 のようになりま す。矢印の左側がパラメータ、 右側がメソッド本体です。 NetBeans IDE 8 には、ラム ダ式を利用する自動リファクタ リング機能が 2 つあります。匿 名内部クラスをラムダ式に変換 する機能と、コレクションの反 復処理を行う for ループをラム ダ式による関数型操作に変換 する機能です。 まずは、匿名内部クラスを 変換するリファクタリング機能 について見ていきます。図2 のような匿名内部クラスは使い やすいプログラミング構造です が、その構文は不必要に冗長 です。1 つのメソッドのみを宣 言する匿名内部クラスをラムダ 式に置き換えることで、より簡 潔に表現できます。 NetBeans IDE 8 には、リファ クタリング対象として妥当な箇 所をハイライト表示する機能が あります(図3)。左サイドバー の Java ヒントを選択すると、 変換が自動的に実行されます。 図4 から分かるように、新しい 構文ははるかに読みやすく簡 潔です。 一見すると単純な変換のよう ですが、IDE によって静的分析 が行われ、安全な変換が保証 NetBeans IDE 8 を使用した Java SE 8 への迅速で簡単な変換 NetBeans 8の新規ツールでJava SE 8の関数型機能を利用する Geertjan WielengaがJava SE 8へのコ ード移行方法を説明します。 GEERTJAN WIELENGA、 LYLE FRANKLIN、ALEX GYORI 図3 図2 図1 Development Tools and Techniques Geertjan WielengaOracle Developer Tools の Product Manager。 NetBeans IDE を 担当。 Lyle Franklin南カリフォルニア 大学で計算機科学 の修士課程に在学 中。 Alex Gyori :イリ ノイ大学アーバ ナ・シャンペーン 校でソフトウェア・ エンジニアリング を専攻する博士課 程学生。

Upload: duongminh

Post on 30-Jun-2019

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NetBeans IDE 8を使用した - oracle.com · oracle.com/javamagazine ///// may/june 2014 java tech 28 community java in action about us blog //java architect / されています。

ORACLE.COM/JAVAMAGAZINE ///////////////////////////////// MAY/JUNE 2014

JAVA TECH

27

COMMUNITY

JAVA IN ACTION

ABOUT US

blog

//java architect /

本記事では、開発者が Java SE 8 の関数型機能を利用

できるようにする、NetBeans IDE 8 の便利な新規ツールを紹介します。Java SE 8 では、Java 言語機能としてラムダ式が導入されました。Java のラムダ式は図 1のようになります。矢印の左側がパラメータ、右側がメソッド本体です。NetBeans IDE 8 には、ラムダ式を利用する自動リファクタリング機能が 2つあります。匿

名内部クラスをラムダ式に変換する機能と、コレクションの反復処理を行うfor ループをラムダ式による関数型操作に変換する機能です。まずは、匿名内部クラスを変換するリファクタリング機能について見ていきます。図 2のような匿名内部クラスは使いやすいプログラミング構造ですが、その構文は不必要に冗長です。1つのメソッドのみを宣言する匿名内部クラスをラムダ

式に置き換えることで、より簡潔に表現できます。NetBeans IDE 8 には、リファクタリング対象として妥当な箇所をハイライト表示する機能があります(図 3)。左サイドバーの Java ヒントを選択すると、

変換が自動的に実行されます。図 4から分かるように、新しい構文ははるかに読みやすく簡潔です。 一見すると単純な変換のようですが、IDE によって静的分析が行われ、安全な変換が保証

NetBeans IDE 8を使用した Java SE 8 への迅速で簡単な変換NetBeans 8の新規ツールでJava SE 8の関数型機能を利用する

Geertjan WielengaがJava SE 8へのコード移行方法を説明します。

GEERTJAN WIELENGA、LYLE FRANKLIN、ALEX GYORI

図3

図2

図1

DevelopmentTools andTechniques

Geertjan Wielenga:Oracle Developer Tools の Product Manager。NetBeans IDE を担当。Lyle Franklin: 南カリフォルニア大学で計算機科学の修士課程に在学中。 Alex Gyori :イリノイ大学アーバナ・シャンペーン校でソフトウェア・エンジニアリングを専攻する博士課程学生。

Page 2: NetBeans IDE 8を使用した - oracle.com · oracle.com/javamagazine ///// may/june 2014 java tech 28 community java in action about us blog //java architect / されています。

ORACLE.COM/JAVAMAGAZINE ///////////////////////////////// MAY/JUNE 2014

JAVA TECH

28

COMMUNITY

JAVA IN ACTION

ABOUT US

blog

//java architect /

されています。たとえば、図 5のコードをよく見てください。ここで使用されているdoPrivilegedメソッドはオーバーロードされており、PrivilegedActionまたはPrivilegedExceptionAction のいずれかを引数に取ることができます。この状態でリファクタリングを実行した場合、正しい型へのキャストが自動

的に追加されます(図 6)。 仮にこのキャストが追加されなければ、変換後のラムダ式は図 7のようにあいまいになり、コンパイル・エラーが発生します。また、図8では、匿名内部クラス内の変数宣言が、その外側のスコープで宣言された変数を隠して(シャドウ化して)います。 変数のシャドウ化は匿名内部クラ

スでは正当ですが、ラムダ式では許可されません。そのため、IDEでは、変数のシャドウ化が検出された場合は、コンパイル・エラーを防ぐためにシャドウ化変数の名前が自動的に変更されます。たとえば図 9のように、エラーを回避するために変数名に「1」が付加されます。2つ目のリファクタリング機能(図10)でもJava SE 8 の新機能を利用します。その新機能とは内部イテレータです。Java SE 8 では、ラムダ式を引数に取り、コレクションに

対して関数型操作を実行できる各種メソッドが Collections API に追加されました。関数型操作の例として少し挙げるだけでも、MapReduce、filterForEach、anyMatch などがあります。NetBeans IDEでは、既存の外部イテレータ(拡張 for ループなど)を、新しい内部イテレータを使用するようにリファクタリングできます。図 11の例では、ルールのコレクションに含まれるエラーの総数を計算しています。それほど明白ではないものの、この例は filter

図5

図6

図7

図8

図4

Page 3: NetBeans IDE 8を使用した - oracle.com · oracle.com/javamagazine ///// may/june 2014 java tech 28 community java in action about us blog //java architect / されています。

ORACLE.COM/JAVAMAGAZINE ///////////////////////////////// MAY/JUNE 2014

JAVA TECH

29

COMMUNITY

JAVA IN ACTION

ABOUT US

blog

//java architect /

MapReduce 操作と同等です。if 文で要素をフィルタリングし、関数でエラー数を呼び出し、複合代入演算子で各カウントをアキュムレータに追加しています。NetBeans IDE8ではこのコードを、関数型操作を使用するように自動的にリファクタリングできます(図 12)。この例からは、ラムダ式のパラメータ型が省略可能であること、および省略した場合はコンパイラにより推

論されることも分かります。ただし、可読性を高めるためやスタイルに準拠するためにパラメータ型を明示する場合は、IDEで自動的にパラメータ型が記述されるように指定できます(図 13)。その結果、図 14の 10 行目のように、パラメータ型が明示的に設定されます。NetBeans IDEでは、ラムダ式を、同じ操作を表すメソッド参照に変換

することもできます(図 15)。図 16のように、標準的なラムダ式の ->構文が :: 構文に置き換えられます。紹介したリファクタリングは、自動ツールを利用しない場合、時間がか

かるだけでなく、適切に行わなければ検出しづらいバグにもつながります。NetBeans IDEでは、元のプログラムの振る舞いを維持しながら、これらのリファクタリングがすばやく実

図11

図10

図12

図13

図14

図9

Page 4: NetBeans IDE 8を使用した - oracle.com · oracle.com/javamagazine ///// may/june 2014 java tech 28 community java in action about us blog //java architect / されています。

ORACLE.COM/JAVAMAGAZINE ///////////////////////////////// MAY/JUNE 2014

JAVA TECH

30

COMMUNITY

JAVA IN ACTION

ABOUT US

blog

//java architect /

行されます。また、クイック・ヒントを表示する操作モードに加えて、リファクタリングを一括で実行するバッチ・モードも利用できます。図 17のように、1つのファイル、プロジェクト全体、または開いているすべてのプロジェクトを選択して、そのスコープに含まれるすべての変換候補をプレビュー表示できます。また、バッチ・モードのリファクタリング・ツールを使用しない場合も、左サイドバーに Java ヒントが表示さ

れたときにはいつでも、任意のスコープでリファクタリングを実行するように指定できます(図 18)。コードが数十万行に及ぶプロジェクトでも数秒でスキャンされます。プレビューでは、実行する変換の内容を詳細に制御することも、変換可能な箇所をそのまますべてリファクタリングすることも可能です(図 19)。

まとめNetBeans IDE 8 では、既存の重要なコード構造を、Java SE 8 で導入され

た新しい関数型スタイルのコードへと正確かつスムーズにアップグレードするために必要なツールが提供されます。NetBeans IDE 8の自動リファクタリング機能により、関数型操作を使用するようにコードをリファクタリングできます。また、バッチ・モードでは、リファクタリングのスコープを指定できます。ぜひ今すぐにでもコードの変換を始めてみてください。</article>

図15

図19

図18

図17

図16

LEARN MORE• NetBeans IDE 8のダウンロード

DevelopmentTools andTechniques

MORE ON TOPIC: