概要
Bundle arguments into parameter object
前提
Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)
当記事は上記のうち、Collecting Inputsに関する話です。
詳細
概要
一般的に一緒に現れるパラメータを新たなクラスの中に組み合わせる
理由
パラメータオブジェクトクラスは混ざったパラメータの振る舞いを引きつける"磁石"として働く
サンプルコード(適用前)
色と濃さを毎回各メソッドに渡します。
class Pencil def write_charactors(color, deapth) "#{color}色、濃さ#{deapth}で文字を書きました。" end def write_pictors(color, deapth) "#{color}色、濃さ#{deapth}で絵を書きました。" end end pencil = Pencil.new puts pencil.write_charactors("赤", "B") puts pencil.write_pictors("緑", "HB")
出力
赤色、濃さBで文字を書きました。 緑色、濃さHBで絵を書きました。
サンプルコード(適用後)
class Pencil def write_charactors(pencil_style) "#{pencil_style.color}色、濃さ#{pencil_style.deapth}で文字を書きました。" end def write_pictures(pencil_style) "#{pencil_style.color}色、濃さ#{pencil_style.deapth}で絵を書きました。" end end PencilStyle = Struct.new(:color, :deapth) pencil_style1 = PencilStyle.new("赤", "B") pencil_style2 = PencilStyle.new("緑", "HB") pencil = Pencil.new [pencil_style1, pencil_style2].each do |pencil_style| puts pencil.write_charactors(pencil_style) puts pencil.write_pictures(pencil_style) end
出力
赤色、濃さBで文字を書きました。 赤色、濃さBで絵を書きました。 緑色、濃さHBで文字を書きました。 緑色、濃さHBで絵を書きました。