凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46948
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

Eclipseにはリファクタリングという便利な機能があります。このシリーズではその使い方をお送りしたいと思います。

まずは手始めにrename機能からです。

Eclipeのリファクタリング リネーム機能

リファクタリングの初歩としてリネーム(名称変更)が挙げられます。

Eclipse3.4では以下の要素に対してリネームを行うことができます。

  • 型(クラス・インターフェース・列挙型)
  • メソッド
  • メソッドの引数
  • フィールド
  • ローカル変数
  • ジェネリクス型パラメータ
  • 列挙
  • コンパイル単位(.javaファイルのこと)
  • パッケージ
  • ソースフォルダ
  • プロジェクト

Eclipse3.4ではリネームの際にテキストフィールド上で操作を完結することができますが、オプションを指定したい場合は▼をクリックすることでダイアログを開くことができます。

"Open Rename Dialog"を選択します。すると、選択中の要素に合わせたダイアログが表示されます。以下は特殊なオプションの存在する要素についての補足です。

型の場合

型のリネーム機能では、近い名前のフィールド名やメソッド名をリネームさせることができます。 Rename Typeダイアログで"Update similarly named variables and methods"「同名の変数・メソッドも更新する」を選択してください。 "Configure ..."を選択することで、型名のマッチング方法を設定することができます。

  • "Find exact names only"「完全に一致する名前だけを対象とします」
  • "Also find embedded names"「語中に埋め込まれた名前も対象とします」
  • "Also find name suffixes"「語尾が同じものを対象とします」

"Update textual occurrences in comments and strings"
「コメント・文字列中にある型名を更新する」
ではコメントやStringリテラル中にある型名を変更してくれます。 ただし、英文を前提にしているのか型名はスペースで区切られていないとうまく識別できません。 語と語の間に空白が入らない日本語のような環境下ではうまく機能しないことがあります。

"Update fully qualified names in non-Java text files"
「非Javaのテキストファイル中の完全名を更新する」
では.javaファイル以外のテキストファイル中に現れる、完全名(パッケージ名の記述を省略しないクラス名表記)を更新します。 "File name patterns"で対象となるファイル名を絞り込むことができます。

メソッドの場合

"Keep original method ad delegate to renamed method"
「オリジナルのメソッドを残して名称を変更したメソッドに処理を委譲します」
Adapterパターンなどの実装時に便利です。

フィールドの場合

"Update textual occurrences in comments and strings"
クラスに同じ

"Rename getter: 'getHoge' to 'getPiyo'"
"Rename setter: 'setHoge' to 'setPiyo'"
getter/setterを併せてリネームします

列挙の場合

"Update textual occurrences in comments and strings"
クラスに同じ

コンパイル単位の場合

"Update similarly named variables and methods"
"Update textual occurrences in comments and strings"
"Update fully qualified names in non-Java text files"
クラスに同じ

パッケージの場合

"Rename subpackages"
「サブパッケージも併せてリネームします」

"Update textual occurrences in comments and strings"
"Update fully qualified names in non-Java text files"
クラスに同じ

機械的なリファクタリングの力

いかがでしょうか。これらの変更は、コンパイルと同じく静的に機械的に行われるもので、現在ではかなりの信頼性を持っています。 手作業でこういった作業を行う場合、時間がかかることもありますが、ヒューマンエラーによるミスの混入を防げません。 その点からしても、これらの機能を使わない手はないでしょう。

過去にはこうした作業はヒューマンエラーによるバグ混入を恐れて、「極力行わないこと」としていたかもしれませんが、 機械的に相当の精度で行われると言う前提のもとでは、そのリスクも再評価せねばなりません。

少なくとも、これらの要素の名称変更に対して昔ほどリスクを負わなくなったと言うことは把握しておいてください。 名称変更がそれほどリスキーではなくなった今、名称未確定のまま開発を進めることは難しくなくなったということでもあります。

投稿日時 : 2008年11月3日 23:49
コメント
タイトル
名前
Url
コメント