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

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

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

インライン化(Inline)

変数/メソッド(コンストラクタ含む⁠⁠/定数/スーパークラスをインラインに展開します。抽出系リファクタリングの逆を行います。

使い方
  1. エディタ上でインライン化したいシンボルにカーソルを置く
  2. "Inline..."を実行(インライン化可能な箇所が複数ある場合,すべてを変更するかどうかを問い合わせてきます)

図23 ⁠Inline Variable」ダイアログ(ローカル変数のインライン化)

図23 「Inline Variable」ダイアログ(ローカル変数のインライン化)

図24 ⁠Inline Method」ダイアログ(メソッドのインライン化)

図24 「Inline Method」ダイアログ(メソッドのインライン化)

重複したコードの置換(Find and Replace Code Deplicates)

選択したメソッドに類似したコードを検索し,該当箇所をそのメソッドの呼び出しに置き換えます。

使い方
  1. エディタ上で対象にしたいメソッドにカーソルを置く
  2. "Find and Replace Code Deplicates..."を実行(⁠⁠Specify Replace Code Duplicates Scope」ダイアログに重複コードを探す範囲を指定します)

図25 ⁠Specify Replace Code Duplicates Scope」ダイアログ(クリックすると動きがわかります)

「⁠Specify Replace Code Duplicates Scope」ダイアログ` &title=`図25 ⁠Specify Replace Code Duplicates Scope」ダイアログ` &width=`400` />

真偽の反転(Invert Boolean)

メソッドや変数のBoolean値を反転させます。

使い方
  1. エディタ上で対象にしたいメソッドや変数にカーソルを置く
  2. "Invert Boolean..."を実行

図26 ⁠Invert Boolean」ダイアログ

図26 「Invert Boolean」ダイアログ

メンバのプルアップ(Pull Members Up)

クラスのメンバ(クラス変数,インスタンス変数,メソッドなど)をスーパークラスやインターフェイスに移動します。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Pull Members Up..."を実行

図27 ⁠Pull Members Up」ダイアログ

図27 「Pull Members Up」ダイアログ

メンバのプッシュダウン(Push Members Down)

プルアップの逆で,クラスのメンバをサブクラスや下位のインターフェイスに移動します。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Push Members Down..."を実行

図28 ⁠Push Members Down」ダイアログ

図28 「Push Members Down」ダイアログ

可能ならばインターフェイスを使用する(Use Interface Where Possible)

指定したクラスの参照箇所をインターフェイスに置き換え可能ならばインターフェイスに置き換えます(スーパークラスにも置き換え可能⁠⁠。

使い方
  1. エディタ上で,インターフェイスやスーパークラスに置換したいクラスにカーソルを置く
  2. "Use Interface Where Possible..."を実行

図29 ⁠Use Interface Where Possible」ダイアログ

図29 「Use Interface Where Possible」ダイアログ

継承をデリゲートに置き換える(Replace Inheritance with Delegation)

親クラスの継承関係を外して,その部分を委譲(デリゲート)に置き換えます。

使い方
  1. 「Projectツールウィンドウ」「Structureツールウィンドウ⁠⁠,エディタで対象のクラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Replace Inheritance with Delegation..."を実行

図30 ⁠Replace Inheritance with Delegation」ダイアログ

図30 「Replace Inheritance with Delegation」ダイアログ

仲介人の削除(Remove Middleman)

デリゲートしている処理を,直接デリゲート先に受け渡すような処理に置き換えます。文章だとわかりづらいですが,リスト1リスト2に変えるようなリファクタリングを行います。

リスト1 Remove Middleman前のコード

// 呼び出し側
String str = new Foo().getBarValue();

// Foo.java
public String getBarValue() {
  return bar.getString();
}

リスト2 Remove Middleman前のコード

// 呼び出し側
String str = new Foo().getBar().getString();

// Foo.java
public String getBar() {
  return bar;
}

シチュエーションが限定的過ぎて,正直いつ使うのかわからないリファクタリングです。

使い方
  1. 「Structureツールウィンドウ」やエディタ上で,デリゲート対象のインスタンス変数を選ぶ(エディタの場合,カーソルを置く)
  2. "Remove Middleman..."を実行

図31 ⁠Remove Middleman」ダイアログ(クリックすると動きがわかります)

「⁠Remove Middleman」ダイアログ` &title=`図31 ⁠Remove Middleman」ダイアログ` &width=`400` />

著者プロフィール

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

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

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

Twitter: @masanobuimai