Android Studio最速入門~効率的にコーディングするための使い方

第37回 リファクタリング・カタログ

この記事を読むのに必要な時間:およそ 8 分

抽出(Extract)

JavaやXMLのコード片から変数やメソッド,外部定義を抜き出す抽出系リファクタリングです。このリファクタリングはちょっとユニークで,一部の抽出系リファクタリングでは,カーソル位置を基準に抽出可能なコード片を候補を示します。

図10 抽出可能な範囲が複数ある場合はそれが候補にでる(クリックすると動きがわかります)

また抽出系リファクタリングは,リネームとは毛色の異なるIn-placeモードで実行していくのも特徴です。

ローカル変数の抽出(Variable)

選択した式をローカル変数にします。実を言うと第11回で紹介した「Introduce local variable」と仕組みは同じなのです。

図11 ローカル変数の抽出例(クリックすると動きがわかります)

使い方
  1. エディタ上でローカル変数に置き換えたい式にカーソルを置く
  2. "Variable..."を実行
    • カーソル位置から置換可能な式の候補が複数ある場合は,どれを置換するか指定する
    • 置き換える式が複数箇所で見つかった場合,すべて置換するかどうかを指定する

定数(クラス変数)の抽出(Constant)

選択した式をクラス変数にします。また,このリファクタリングはインテンションでも提供されており,文字列リテラルの上で"Introduce Constant"を実行しても同様のことができます。

図12 定数の抽出例(クリックすると動きがわかります)

使い方
  1. エディタ上でクラス変数に置き換えたい式または宣言にカーソルを置く
  2. "Constant..."を実行

フィールド(インスタンス変数)の抽出(Field)

選択した式をインスタンス変数にします。このとき,インスタンス変数を初期化する場所を指定できます。

図13 フィールドの抽出例(クリックすると動きがわかります)

使い方
  1. エディタ上でインスタンス変数に置き換えたい式または宣言にカーソルを置く
  2. "Field..."を実行

引数の抽出(Parameter)

メソッド内の式を,そのメソッドの引数にします。この際,既存のメソッドに新しい引数を追加するか,既存のメソッドをオーバーロードした新しいメソッドを作成するか選べます。

図14 引数の抽出例(クリックすると動きがわかります)

使い方
  1. エディタ上で引数に置き換えたい式にカーソルを置く
  2. "Parameter..."を実行

パラメタオブジェクトの抽出(Parameter Object)

メソッドの引数をまとめたラッパークラスを作成するか,既存のクラスに置き換えます。

使い方
  1. 「Structureツールウィンドウ」またはエディタで,パラメタオブジェクトを適用したいメソッドを選ぶ(エディタの場合,カーソルを置く)
  2. "Parameter Object..."を実行(⁠⁠Introduce Parameter Object」ダイアログに諸設定を行う)

図15 ⁠Introduce Parameter Object」ダイアログ

図15 「Introduce Parameter Object」ダイアログ

メソッドの抽出(Method)

選択した範囲(コードブロック)をメソッドとして抽出します。

使い方
  1. エディタ上で,メソッドにしたいコードブロックを選択
  2. "Method..."を実行(⁠⁠Extract Method」ダイアログに諸設定を行う)

図16 ⁠Extract Method」ダイアログ

図16 「Extract Method」ダイアログ

メソッドオブジェクトの抽出(Method Object)

選択した範囲(コードブロック)をメソッドではなく,その処理だけを行う専用のクラス(メソッドオブジェクト)として抽出します。実行メソッド名は常に invoke() になるようです。

使い方
  1. エディタ上で,メソッドオブジェクトにしたいコードブロックを選択
  2. "Method Object..."を実行(⁠⁠Extract Method Object」ダイアログに諸設定を行う)

図17 ⁠Extract Method Object」ダイアログ

図17 「Extract Method Object」ダイアログ

クラスの抽出(Delegate)

既存のクラスの一部(フィールドやメソッドなど)を新しいクラスに抽出します。元のクラスは,新しいクラスに機能を委譲(デリゲート)します。

コマンド名は"Delegate..."(委譲)ですが,やってることはクラスの抽出です。意味的にはどちらも同じなのですが,ダイアログは「Extract Class」となっていたり妙な混乱を誘います。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Delegate..."を実行(⁠⁠Extract Class」ダイアログに諸設定を行う)

図18 ⁠Extract Class」ダイアログ

図18 「Extract Class」ダイアログ

インターフェイスの抽出(Interface)

エディタや「Projectツールウィンドウ」などで対象クラスを選択して,このリファクタリングを実行すると,インターフェイスに抽出可能な要素がリストアップされたダイアログが表示されます。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Interface..."を実行(⁠⁠Extract Interface」ダイアログに諸設定を行う)

図19 ⁠Extract Interface」ダイアログ

図19 「Extract Interface」ダイアログ

スーパークラスの抽出(Superclass)

「インターフェイスの抽出」のスーパークラス版です。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Superclass..."を実行(⁠⁠Extract Superclass」ダイアログに諸設定を行う)

図20 ⁠Extract Superclass」ダイアログ

図20 「Extract Superclass」ダイアログ

スタイルの抽出(Style)

Android固有のリファクタリングです。レイアウトリソースからスタイルを抽出します。抽出したスタイルは style.xml に定義され,抽出元は style属性に置き換えられます。

使い方
  1. エディタ上で,スタイルを抽出したいXMLエレメントにカーソルを置く
  2. "Style..."を実行(⁠⁠Extract Android Style」ダイアログに諸設定を行う)

図21 ⁠Extract Android Style」ダイアログ

図21 「Extract Android Style」ダイアログ

レイアウトの抽出(Layout)

Android固有のリファクタリングです。レイアウトリソースを分離して別ファイルに抽出します。抽出した後は <include layout="..."> に置き換えられます。

使い方
  1. エディタ上で,レイアウトを分離したいXMLエレメントにカーソルを置く(もしくは範囲を選択する)
  2. "Layout..."を実行(⁠⁠Extract Android Layout」ダイアログに諸設定を行う)

図22 ⁠Extract Android Layout」ダイアログ

図22 「Extract Android Layout」ダイアログ

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai