THp*_*ubs 8 ruby coding-style rubocop
在我的rails应用程序中,我有一个这样的方法:
def cart
if user_signed_in?
@user = current_user
if @user.cart.present?
@cart = @user.cart
else
@cart = false
end
else
cart_id = session[:cart_id]
if cart_id.present?
@cart = Cart.find(cart_id.to_i)
else
@cart = false
end
end
end
Run Code Online (Sandbox Code Playgroud)
Rubocop将此方法标记为Method had too many lines.为什么写一个行太多的方法不好?如果我们必须做很多工作怎么办?我怎样才能重新考虑这一点并编写好的代码?
一种方法是你可以使用三元运算符重构它,但代价是可读性.
def cart
if user_signed_in?
@user = current_user
@cart = @user.cart.present? ? @user.cart : false
else
cart_id = session[:cart_id]
@cart = cart_id.present? ? Cart.find(cart_id.to_i) : false
end
end
Run Code Online (Sandbox Code Playgroud)
其次,如果你被迫编写一个很长的方法,那就意味着你的面向对象设计有问题.也许,您需要为额外功能设计一个新类,或者您需要通过编写多个方法将功能拆分到同一个类中,这些方法在组合时可以完成单个long方法的工作.
为什么写一个行太多的方法不好?
就像一篇带有大段落的文章难以阅读一样,同样使用较长方法的程序难以阅读,并且不太可能重复使用.您划分代码的块越多,代码的模块化,可重用性和可理解性就越高.
如果我们必须做很多工作怎么办?
如果你必须做很多工作; 这肯定意味着你以一种不好的方式设计你的课程.也许,您需要设计一个新类来处理此功能,或者您需要将此方法拆分为较小的块.
我怎样才能重新考虑这一点并编写好的代码?
为此,我强烈推荐给你一本名为:Refactoring by Martin Fowler的好书,他在解释重构代码的方式,时间和原因方面非常出色.