*

Eclipse(4.4)でJava言語のリファクタリング機能の使い方[「メソッド・シグニチャーの変更」と基本的な抽出処理、及び「インライン化」、「定数の抽出」]

公開日: : 最終更新日:2015/05/03 Eclipse, Java


スポンサードリンク



本エントリーでは、Eclipse(4.3)でJava言語のリファクタリング機能の使い方[リファクタリングの説明と「名前変更」と「移動」]に引き続き
Eclipse(4.4)の「リファクタリング」機能の使い方を説明させていただきます。

前回まではEclipse 4.3 Kepler ケプラーでしたが、Eclipse 4.4 Luna ルナが正式リリースされたで、今回から変更いたします。
OSもWindowsからMacに変更させていただきます。

今回扱う「リファクタリング」機能は以下の画像の赤枠部分となります。
f809fed773704362175fe162876a281a

「メソッド・シグニチャーの変更」と基本的な抽出処理、及び「インライン化」

「メソッド・シグニチャーの変更」

メソッド・シグニチャーとは

メソッド・シグニチャーとはメソッドの名前、戻り値、引数の数と型の構成を意味します。
結局は、メソッドの定義そのものがメソッド・シグニチャーであると言えます。

当然ですが、メソッド・シグニチャーが同じメソッドは同一クラス内には存在しえません。

メソッド・シグニチャーの変更の実際

リファクタリング対象となるHogeHogeクラスを以下のように定義しました。

sampleFuncメソッドを対象にメソッド・シグニチャーの変更を実施してみます。
まずエディターでHogeHogeクラスを開き、sampleFuncのどこかをクリックします。
スクリーンショット 2014-10-08 18.26.14

次に、Eclipseのファイルメニューの[リファクタリング]>[メソッド・シグニチャーの変更]をクリックします。
すると以下の画面が表示されます。
スクリーンショット 2014-10-08 18.32.26

まずは、パラメーターにstringを追加してみます。
以下の画像の赤枠の「追加」ボタンをクリックします。
スクリーンショット 2014-10-08 18.32.26

すると新たな行が追加されました。
スクリーンショット 2014-10-08 18.39.15

追加された行の型をクリックするとセルが編集モードに変わりますのでStringと入力します。
同様に名前にはstringValueを指定します。
この状態で「OK」ボタンをクリックします。
スクリーンショット 2014-10-08 18.49.29

リファクタリング後のsampleFuncは以下のようになりました。

うんうん、引数が追加されています。

「メソッド・シグニチャーの変更」では引数の追加、削除以外にもスローする例外の追加や
「変更されたメソッドへの委譲として元のメソッドを保持」する形でのリファクタリングが可能です。

sampleFuncを元の状態に戻してから、「変更されたメソッドへの委譲として元のメソッドを保持」をチェックしてリファクタリングを実施してみます。
スクリーンショット 2014-10-08 18.59.22

リファクタリング後のコードは以下のようになりました。
元のメソッドも残っていますが、リファクタリングで作成されたメソッドに処理は委譲されていることが確認できます。

「非推奨としてマークする」チェックボックスにチェックを付けた状態でリファクタリングを行うと、
非推奨メソッドをあらわすアノテーションである@deprecatedが元のメソッドに付与されます。

「メソッドの抽出」

メソッドの抽出を簡単に説明すると、任意のスコープに存在するロジックを新規メソッド内に移動し、処理を委譲することです。
このリファクタリングは、選択したロジックを新規メソッドに移動できる場合のみ実施可能です。

「メソッドの抽出」の実際

以下のコードを例にメソッドの抽出の説明をさせていただきます。

まずは上記コードの4行目から6行目を選択します。
スクリーンショット 2014-10-08 21.31.09

次に、Eclipseのファイルメニューの[リファクタリング]>[メソッドの抽出…]をクリックします。
すると以下の画面が表示されます。
スクリーンショット 2014-10-08 21.34.24

メソッド名にcalcFuncを入力し、まずは「プレビュー>」ボタンを押してみます。
スクリーンショット 2014-10-08 21.39.47

すると次のような画面が表示されます。
スクリーンショット 2014-10-08 21.42.43

うんうん、予想どうりですね。上記画面で「OK」ボタンをクリックするとリファクタリングが実施されます。
当然ですが、メソッド名を入力した画面で「OK」ボタンをクリックしてもリファクタリングが実施されます。

リファクタリング後のコードは以下のようになりました。

今実施した操作ではロジック全てを選択したのでこのような結果となりましたが、calcFuncの引数にdoubleとintを
指定するようにしたい場合は、元コードの6行目だけを選択した状態でメソッドの抽出を行います。
スクリーンショット 2014-10-08 21.55.41

リファクタリング後のコードは以下のようになりました。

「インライン化」

Eclipseのメニューの順番とは異なりますが、「インライン化」は「メソッドの抽出」は対となりますのでインライン化を先に説明させていただきます。
「インライン化」とは、任意のメソッドの呼び出しを、そのメソッドの処理内容に置換することを意味します。
この説明ではとっても分かりにくいですが、実際にどうなるかを見ていただければ感じがつかめると思います。

リファクタリングに先立ってHogeHogeを以下のように修正しました。
ポイントは、sampleFuncにcalcFuncメソッドを呼び出す箇所が2つあることです。

「インライン化」の実際

6行目のcalcFuncを選択します。選択でなくても6行目のどこかにカーソルが存在する状態でもかまいません。
スクリーンショット 2014-10-09 15.58.55

次に、Eclipseのファイルメニューの[リファクタリング]>[インライン化…]をクリックします。
すると以下の画面が表示されます。
「プレビュー>」ボタンの動作は「メソッドの抽出」の時と同様の動きですので説明は省略させていただきます。
スクリーンショット 2014-10-09 16.02.07

上記の画面では「選択された呼び出し時のみ」のラジオボタンが選択されている状態となっています。
このままOKボタンをクリックすると6行目のcalcFuncの呼び出しのみがインライン化されます。
スクリーンショット 2014-10-09 16.02.07

リファクタリング後のコードは以下のようになりました。
確かに6行目だけcalcFuncのメソッド呼び出しがcalcFuncのロジックに変化しています。

コードをリファクタリング前の状態に戻し、メソッドのインライン化の指定時のオプションを変更してリファクタリングを実施してみます。
今度は「すべての呼び出し」のラジオボタンを選択した状態で「OK」ボタンをクリックします。
スクリーンショット 2014-10-09 16.15.41

リファクタリング後のコードは以下のようになりました。
6、7行目ともにインライン化されました。
calcFuncメソッドも無くなっていますね、これも画面オプションで指定した通りです。

「ローカル変数の抽出」

数値リテラルや文字列リテラルの対応する型のローカル変数を宣言し、そのリテラル値で初期化する処理となります。
処理対象例として以下のコードを利用します。

「ローカル変数の抽出」の実際

・doubleの単独の数値を対象とする抽出
リファクタリング対象のコードの3行目の0.5を選択して「ローカル変数の抽出」を行ってみます。
スクリーンショット 2014-10-09 18.53.45

この状態でEclipseのファイルメニューの[リファクタリング]>[ローカル変数の抽出…]をクリックします。
すると以下の画面が表示されます。
スクリーンショット 2014-10-09 18.56.54

何も変更せずに「OK」ボタンをクリックします。
するとコードは以下のように変更されました。
値が0.5のdoubleの変数dが宣言され、計算式内で利用指定されていた0.5がこのdを利用するようになりました。

・数式を対象とする抽出
今度は100 + 200をローカル変数に抽出してみます。手順は同じですのでリファクタリング後のコードだけを示します。
この結果も予想通りですね。

・文字列を対象とする抽出
今度は文字列リテラルをローカル変数に抽出してみます。
“文字列リテラル1”を選択します。
スクリーンショット 2014-10-09 19.09.18

この状態でEclipseのファイルメニューの[リファクタリング]>[ローカル変数の抽出…]をクリックします。
スクリーンショット 2014-10-09 19.13.05

今回も初期表示されたままでOKボタンをクリックしますが、この例では「選択された式のすべての出現箇所をローカル変数で置換」
のチェックボックスがチェックされていることの意義が発揮されます。
スクリーンショット 2014-10-09 19.17.43

リファクタリング後のコードは以下のようになります。

“文字列リテラル1”の値のStringの変数stringを宣言し、二カ所あった”文字列リテラル1”がstringに置換されています。
なお、プレビュー機能からどのリテラルを置換するかを指定することも可能です。
スクリーンショット 2014-10-09 19.20.27

「定数の抽出」

引き続き先ほどのリファクタリング後のコードを対象に説明させていただきます。

「定数の抽出」の実際

3行目の0.5を選択した状態で、Eclipseのファイルメニューの[リファクタリング]>[定数の抽出…]をクリックします。

すると以下の画面が表示されます。
スクリーンショット 2014-10-15 15.13.16

本画面では抽出した定数の名前、アクセス修飾子が指定できます。
また、「選択された式のすべての出現箇所を定数への参照で置換」、「定数の参照を型名で修飾」のチェックボックスが存在します。

「選択された式のすべての出現箇所を定数への参照で置換」は同じ値(今の例では0.5)はすべて定数への参照に置換するとのオプションです。
「定数の参照を型名で修飾」をチェックすると、定数への参照に置換される時に「定数が含まれる型」+ . + 「定数名」との表現になります。

「定数の参照を型名で修飾」の方は少し分かりづらいと思いますので、チェック有無でリファクタリングの結果がどう変わるかを見ていただきます。

・「定数の参照を型名で修飾」のチェックなし
「定数の参照を型名で修飾」をチェックしない状態で「OK」ボタンをクリックします。
スクリーンショット 2014-10-15 15.13.16

リファクタリング後のHogeHogeクラスは以下のようになりました。

2行目に名前が_0_5の定数宣言が追加され、5行目の変数dに_0_5が代入されるように変更されました。

・「定数の参照を型名で修飾」のチェックあり
「Ctrl」+z(Macの場合は「Command」+z)でコードをリファクタリング前に戻して再度
3行目の0.5を選択した状態で、Eclipseのファイルメニューの[リファクタリング]>[定数の抽出…]をクリックします。
今度は「定数の参照を型名で修飾」にチェックを入れて「OK」ボタンをクリックします。
スクリーンショット 2014-10-15 15.33.31

リファクタリング後のHogeHogeクラスは以下のようになりました。

先ほどと違って、5行目の変数dにHogeHoge._0_5が代入されるように変更されました。
他のクラスから任意のクラス内で定義されている定数を参照する時にはこの形式になりますよね、まさにあれです。

「Eclipse(4.4)でJava言語のリファクタリング機能の使い方[「メソッド・シグニチャーの変更」と基本的な抽出処理、及び「インライン化」、「定数の抽出」]」は以上です。


スポンサードリンク



関連記事

「HyperSQL」の環境を作成し、Eclipseの「DBViewer」プラグインを利用してSQLを発行してみる

Eclipseの「DBViewer」プラグインを利用して「Java DB」の環境を作成し、SQLを発

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・クラスパスの順序およびエクスポート設定]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「ビルド・クラスパスの順序および

記事を読む

Java8の新機能について

オラクルは2014年3月18日(日本時間3月19日早朝)に「Java 8」を正式に公開しました。

記事を読む

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の増加が見込まれます。 とは言

記事を読む

Java超入門 with Eclipse[4:クラスに関する基礎知識(修飾子とクラスとインスタンスと変数)]

前回は、Javaの基本であるクラスの基本的な知識をざっくりと説明させていただいたあと、 packa

記事を読む

Eclipseの使い方(Windows環境のEclipse4.3、Eclipse4.4)

Eclipse4.4.0よりJDK8を正式サポートするそうです。 Eclipseトップレベルプ

記事を読む

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりもう半年以上が経過しました。

記事を読む

JDK8(Java8)のインストール方法[Windows]

本エントリーは、Windows7 64bitにJDK8(Java8)をインストールする説明を記載させ

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[JRAおよびクラス・フォルダー/ライブラリー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「JRAおよびクラス・フォルダー

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・パス上のソース・フォルダー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上のソース・フォルダーの利用方法を説

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Eclipse Oxygen Update 1 (4.7.1)を利用してJUnit5の公式ガイドの内容を実践してみる。

いよいよJUnit5が本格的に利用できる環境が整ってきました。

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpring

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑