パンくず
リファクタリング-プログラマーの体質改善テクニック
メソッドの構成
説明変数の導入
内容
リファクタリング名
説明変数の導入
適用ケース要約
複雑な式がある
適用内容要約
処理の目的を説明するような名前を持つ一時変数に式、または式の一部の結果を代入する
適用詳細
いくつもの条件が並んだ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円 ・・・・ あなたはプログラマーではありませんね ----------------