动机:方法粒度小,重用率高,可以读起来像注释,重新修改时比较简单。要注意命名,否则,不提炼也罢。
关键:局部变量或是以整体搬迁(声明、使用都移动到新方法)还是以参数传递的形式传递给新方法。注意局部变量是不是在后面的代码使用到了。
示例:
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