0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【リファクタリング】 Replace Temp with Query(一時変数の問い合わせメソッドへの置き換え)

Posted at

1. 概要(Overview)

Replace Temp with Query は、式の結果を一時変数に保存する代わりに、その計算をメソッドとして抽出して直接問い合わせる ようにするリファクタリングです。

目的は以下の通りです:

  • 一時変数を減らし、再利用可能なメソッドに置き換える
  • 変数の寿命を短くして責務を明確化
  • 他のメソッドからも同じロジックを呼び出せるようにして 重複を削減

2. 適用シーン(When to Use)

  • 一時変数が 計算結果を一度だけ保持 している
  • その式を 他のメソッドでも再利用したい
  • 変数を参照するより、明確な名前のメソッドに切り出した方が分かりやすい
  • テストの観点からも、式のロジックを独立させたい

よくある匂い:

  • Long Method(長すぎるメソッド)
  • Duplicate Code(重複コード)

3. 手順(Mechanics / Steps)

  1. 一時変数に代入されている式を特定
  2. その式を新しいメソッドに切り出す(Extract Method)
  3. 変数を削除し、代わりに新しいメソッド呼び出しを利用
  4. 他の場所でも再利用できるようにクラス設計を調整
  5. テストを実行して正しく動作することを確認

4. Kotlin 例(Before → After)

Before:一時変数を使っている

class Order(val items: List<Double>) {
    fun printSummary() {
        val total = items.sum()
        println("Total: $total")
        println("Tax: ${total * 0.1}")
        println("Final: ${total * 1.1}")
    }
}
  • total が一時変数として使われているだけ
  • 他のメソッドでも合計計算を使いたくなる可能性が高い

After①:一時変数をメソッドに置き換える

class Order(val items: List<Double>) {
    fun totalAmount(): Double = items.sum()  // ✅ クエリメソッドに変換

    fun printSummary() {
        println("Total: ${totalAmount()}")
        println("Tax: ${totalAmount() * 0.1}")
        println("Final: ${totalAmount() * 1.1}")
    }
}

total 変数が消え、totalAmount() という 意味のあるメソッド に置き換わった。


After②:他の処理でも再利用可能

class Order(val items: List<Double>) {
    fun totalAmount(): Double = items.sum()

    fun hasDiscount(): Boolean = totalAmount() > 10000
}

→ ロジックが再利用可能になり、テストも容易に。


5. 効果(Benefits)

  • 一時変数を削除し、ロジックをメソッドに昇格
  • 計算式を名前付きメソッドにすることで 意図が明確化
  • 他の場所からも呼び出せる → 重複削減・再利用性向上
  • テスト対象が独立し、単体テストがしやすくなる

6. 注意点(Pitfalls)

  • 複雑な式を何度も呼び出すと パフォーマンスに影響する場合がある
    • 対策:必要なら Caching(結果のキャッシュ) を導入
  • クラス外に公開する必要がない場合は、private メソッド にとどめる
  • 「名前を付けることに意味があるか」を常に意識すること

まとめ

  • Replace Temp with Query は「一時変数を削除して、クエリメソッドに置き換える」リファクタリング
  • 判断基準:この計算は他でも使えるか?名前を付ける価値があるか?
  • 基本思想:一時的な値ではなく、明確なメソッドとして表現することで、再利用性・可読性を高める

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?