Headline About TechLog Download Java VBA Link


June 18, 2007. Monday.

Eclipse: リファクタリング

さて、次にEclipseのリファクタリング機能を試してみましょう。一度これに馴染むと、どんどん自分のソースを綺麗に改造したくなります。



クラス名の変更

まずはクラス名を変更してみましょう。Testクラスなんて機能と関係のないクラス名は設計思想上良くありません。いろんな挨拶をするRobotととらえ、このクラスの名前をGreetingRobotというに変更してみる事にします。

クラス名を選択状態にして[右クリック]→[リファクタリング]→[名前変更]と選択すると、右図のようなダイアログが表示されます。新しいクラス名を入力し、何も考えず確定すればクラス名の変更は完了です。publicなクラスのクラス名を変更したので、ソースファイルの名前もGreetingRobot.javaに自動的に変更されます。

変更が完了したら、再びプログラムを実行してみてください。正常動作は確認できたでしょうか?確認したら次の作業に移ります。



メソッドの抽出

次にメソッドの抽出を行いましょう。先ほど作ったGreetingRobotはプログラムを実行すると一回だけ「Hello World」を出力するという、実に応用の効かないクラスとなっています。クラス内で再利用したり、別のクラスからも呼び出せるよう別メソッドに抽出してみましょう。

抽出したい処理をドラッグで選択し、[右クリック]→[リファクタリング]→[メソッドの抽出]と選択します。右のようなダイアログが表示されたら、挨拶メソッドなので、メソッド名をgreetにしてみましょう。他のクラスからも実行できるようにするために、アクセス修飾子はpublicを選択し、OKを押します。すると、先ほどの処理内容が、メソッドgreet()の中に切り出されているはずです。

これで別のクラスからもこの処理を呼び出せるようになりました。変更が終わったら、忘れずにプログラムの再実行による正常動作確認を。



定数の抽出

Javaに限らずプログラム一般において、マジックナンバや文字列をコード中に直接書くのは行儀が悪いので、定数に切り出してしまいましょう。切り出したい文字列を選択し、[右クリック]→[リファクタリング]→[定数の抽出]と選択します。右図のようなダイアログが表示されますので、定数名を決めてOKを押しましょう。"Hello World"という文字列を格納したstatic finalなHELLO_WORLDができ、greet()がその定数を出力する仕様になったのがわかるかと思います。


 さて、以上の操作が正しく実行されると、前回のTest.javaが以下のような内容のGreetingRobot.javaになるはずです。上手く編集できましたか?


package net.sdls.barista.tech;

public class GreetingRobot {

  private static final String HELLO_WORLD = "Hello World!";

  /**
   * @param args
   */
  public static void main(String[] args) {
    greet();
  }

  private static void greet() {
    System.out.println(HELLO_WORLD);
  }

}