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?

【リファクタリング】 Split Temporary Variable(一時変数の分割)

Posted at

1. 概要(Overview)

Split Temporary Variable は、一つの一時変数が 複数の異なる目的 で使われている場合に、それを分割して別々の変数にするリファクタリングです。

目的は以下の通りです:

  • 変数の役割を明確にし、意図の混乱を防ぐ
  • 変数の再代入による誤解・バグを防止する
  • 可読性と保守性を高める

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

  • 一時変数が 2回以上代入されており、異なる意味を持っている
  • 同じ変数名が 計算Aと計算Bの両方 に使われていて分かりにくい
  • デバッグ中に「この変数は今どの値を持っているのか?」が追いづらい
  • 変数名が曖昧 (result, tmp など) で役割が混ざっている

よくある匂い:

  • Temporary Field(不要な一時変数)
  • Obscure Intent(意図の不明確さ)

3. 手順(Mechanics / Steps)

  1. 一時変数の代入箇所を確認
  2. 異なる目的ごとに新しい変数名を導入
  3. すべての参照箇所を新しい変数に切り替え
  4. 元の変数を削除
  5. テストを実行して正しく動作することを確認

4. Kotlin 例(Before → After)

Before:一時変数が複数の役割を持っている

fun calculateValues(a: Int, b: Int) {
    var temp = a * b
    println("Area: $temp")

    temp = 2 * (a + b)
    println("Perimeter: $temp")
}
  • temp が「面積」と「周囲長」の2つの意味で使われている
  • 読み手は「今の temp はどっち?」と混乱する

After:変数を分割

fun calculateValues(a: Int, b: Int) {
    val area = a * b
    println("Area: $area")

    val perimeter = 2 * (a + b)
    println("Perimeter: $perimeter")
}

→ 役割が明確になり、意図がすぐに理解できる。


5. 効果(Benefits)

  • 変数の役割が明確化され、混乱が減る
  • バグのリスク低下(再代入による誤解がなくなる)
  • コードが読みやすく、メンテナンスしやすくなる
  • 変数名が「ドメインの意味」を表現できる

6. 注意点(Pitfalls)

  • 冗長すぎる変数導入は逆効果(不要に変数が増える)
  • パフォーマンスを気にして変数を減らすケースもあるが、可読性優先 が基本
  • 不要な一時変数は Inline Temp で削除した方が良い場合もある

まとめ

  • Split Temporary Variable は「1つの変数に複数の責務を持たせない」リファクタリング
  • 判断基準:この変数は常に同じ意味を持っているか?
  • 基本思想:変数は一貫した役割だけを担い、明確に分ける

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?