Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | メソッドの構成 | 説明変数の導入

内容

リファクタリング

説明変数の導入

適用ケース要約

複雑な式がある

適用内容要約

処理の目的を説明するような名前を持つ一時変数に式、または式の一部の結果を代入する

適用詳細

いくつもの条件が並んだif文のように複雑な式がある場合、
説明変数を導入することにより、処理を分かりやすくすることが出来ます。

ただし、メソッドの抽出を使えば他のメソッドからの利用が出来ることなどメリットが多いため
説明変数を利用する機会は少ないです。
取り扱うパラメータが非常に多いなど、メソッドの抽出が難しい場合に
説明変数を利用します。

サンプル

IT業界の新3K「きつい」「帰れない」「給料が安い」のうち、「帰れない」「給料が安い」の部分を判定し、
両方を満たす場合はIT関係者か質問する機能を実装します。
便宜上、

・「帰れない」の定義は月に1日でも徹夜があること
・「給与が安い」の定義は、月給が25万未満であること

とします。

あれ・・・目から水が・・・

サンプルコード

リファクタリング

def information_variable_before(monthly_all_night_work,monthly_salary)
  puts "月の徹夜が#{monthly_all_night_work}"
  puts "月給が#{monthly_salary}"
  puts "・・・・"
  if (monthly_all_night_work > 0) && (monthly_salary < 250000)
    puts "あなたはプログラマーでしょ?"
  else
    puts "あなたはプログラマーではありませんね"
  end
  puts "----------------"
end

information_variable_before(10,230000)
information_variable_before(0,230000)
information_variable_before(5,280000)

リファクタリング

def information_variable_after(monthly_all_night_work,monthly_salary)
  can_not_go_back_home = (monthly_all_night_work > 0)
  is_cheap_salaly = (monthly_salary < 250000)

  puts "月の徹夜が#{monthly_all_night_work}"
  puts "月給が#{monthly_salary}"
  puts "・・・・"
  if can_not_go_back_home && is_cheap_salaly
    puts "あなたはプログラマーでしょ?"
  else
    puts "あなたはプログラマーではありませんね"
  end
  puts "----------------"
end

information_variable_after(10,230000)
information_variable_after(0,230000)
information_variable_after(5,280000)

▼出力結果(共通)

月の徹夜が10回
月給が230000円
・・・・
あなたはプログラマーでしょ?
----------------
月の徹夜が0回
月給が230000円
・・・・
あなたはプログラマーではありませんね
----------------
月の徹夜が5回
月給が280000円
・・・・
あなたはプログラマーではありませんね
----------------
解説

リファクタリング後の一時変数について。

▼can_not_go_back_home
「帰れない」をあらわす説明変数

▼is_cheap_salaly
「給料が安い」をあらわす説明変数