動機:方法粒度小,重用率高,可以讀起來像註釋,重新修改時比較簡單。要注意命名,否則,不提煉也罷。
關鍵:局部變量或是以整體搬遷(聲明、使用都移動到新方法)還是以參數傳遞的形式傳遞給新方法。注意局部變量是不是在後面的代碼使用到了。
示例:
def print_owning(previous_amount)
outstanding = previous_amount * 1.2
print_banner
#calculate outstanding
@order.each do |order|
outstanding += order.outstanding
end
print_details outstanding
end
提煉、注入閉包、內聯化局部變量---->
def print_owning(previous_amount)
print_banner
outstanding = calculate_outstanding(previous_amount * 1.2)
print_details outstanding
end
def calculate_outstanding(initial_value)
@order.inject(initial_value) { |result, order| result + order.outstanding }
end