diff --git a/chapter06.md b/chapter06.md new file mode 100644 index 0000000..618f21c --- /dev/null +++ b/chapter06.md @@ -0,0 +1,20 @@ +# 第6章 +- リファクタリング作業の大半はコードを適切なパッケージに収めるメソッドの構成方法 + - 長過ぎるメソッドが問題 + - `メソッドの抽出` が中心 + - ローカル変数をどのように扱うか + - `一時変数から問い合わせメソッドへ` で変数自体を除去していく + - 一時変数がいろんな使われ方をしている場合は `一時変数の分割` を先に実行して一時変数を置き換えやすくする + - 一時変数が複雑に絡み合っている場合は `メソッドからメソッドオブジェクトへ` を使って別クラスを導入しつつ、分岐を取り払うことを検討する + - `引数に対する代入の除去` も複雑度を下げる + - `メソッドのインライン化` は逆に独立したメソッド呼び出しを他のメソッドの一部に組み込む + - メソッド抽出を繰り返してみたものの、その中でメソッドとしての役割を果たさなくなったもの + - メソッド分解をした方がわかりやすい場合、 `アルゴリズム変更` も検討する + - コードの意味を通りやすくするために `名前付き引数の導入` を検討する。 + - レシーバが煩雑になるようであれば逆に除去も考える + - デフォルト引数が使われなくなったら `使われていないデフォルト引数の除去` を行う + +## メソッドの抽出( Extract Method ) +- 1つにまとめられるコードブロックがある場合、それをメソッドにして目的を説明する名前をつける + + diff --git a/lib/extract_method.rb b/lib/extract_method.rb new file mode 100644 index 0000000..de14f10 --- /dev/null +++ b/lib/extract_method.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +def print_owing + outstanding = 0.0 + + print_banner + + # 勘定を計算 ( calculate outstanding ) + @orders.each do |order| + outstanding += order.amount + end + + print_details outstanding +end + +def print_banner + # バナーを出力( print banner ) + puts "*************************" + puts "***** Customer Owes *****" + puts "*************************" +end + +def print_details(outstanding) + # 詳細を表示 ( print details ) + puts "name: #{@name}" + puts "amount: #{outstanding}" +end