Tbpgr Blog

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

書籍 リファクタリング−プログラマーの体質改善 | メソッドの構成 | パラメーターへの代入の除去

内容

リファクタリング

パラメーターへの代入の除去

適用ケース要約

コードが引数に代入を行っている。

適用内容要約

代わりに一時変数を使う。

適用詳細

JavaRubyともにメソッドの引数は値渡しです。
そのためメソッドの引数に指定した値の中身を変更する場合、オブジェクトの参照を変更しても
呼び元へは反映されません。また、可読性の面からも引数の内容を変更して利用するのは好ましくありません。
そのため、引数の値を変更している箇所は一時変数に置き換えることが望ましいです。

サンプル

指定した日付の翌日を表示する機能を実装します。
日付は引数で指定します。

サンプルコード

リファクタリング

require "date"

def assignments_parameters_before(date)
  next_day = get_next_day(date)
  puts next_day
end

def get_next_day(date)
  date = date + 1
  return date
end

assignments_parameters_before Date.today

リファクタリング

require "date"

def assignments_parameters_after(date)
  next_day = get_next_day(date)
  puts next_day
end

def get_next_day(date)
  next_day = date + 1
  return next_day
end

assignments_parameters_after Date.today

▼出力結果(共通)
※実行した日は2012/03/21

2012-03-22
解説

リファクタリング後の引数の扱いについて。

▼get_next_day(date)
変更前はget_next_dayメソッドの中で引数のdateが書き換えられています。
変更後は一時変数next_dateに置き換えているため変数名で意味が分かり、
date変数に立ちする誤解も発生しにくくなります。