关于什么更符合红宝石标准的快速提问。
示例1:(a)或(b)更好吗?
# A
annoying_at_times if user == 'Draper' || user == 'Olson' || user == 'Sterling'
# B
annoying_at_times if ['Draper', 'Olson', 'Sterling'].include? user
例2:(c)或(d)更好吗?
# C
i_freaking_love if user == 'Harris' || user == 'Pryce'
# D
i_freaking_love if ['Harris', 'Pryce'].include? user
或者这样做会很疯狂吗?
class Object
def is_in?(array)
array.include?(self)
end
end
#Usage
founding_partner if user.is_in? ['Sterling', 'Cooper', 'Draper', 'Pryce']
修改
如果is_in?
是[{1}}代替User
的方法,该怎么办?
答案 0 :(得分:8)
如果使用rails
(或仅active_support
与core extension cherry picking),则可以使用其他有趣的变体。这与您的is_in?
类似。
require 'active_support'
require 'active_support/core_ext/object/inclusion'
然后
user.in? ['Harris', 'Pryce']
答案 1 :(得分:4)
我个人喜欢“B”和“D”。至于方法,不一定。我以前做过类似的事情,但我认为首选方法是使用内置处理程序并检查对象是否在数组中(例如array.include?(self)
)。
答案 2 :(得分:3)
另一种选择:case when
处理列表。
case user
when "Draper", "Olson", "Sterling"
annoying_at_times
when "Harris", "Price"
i_freaking_love
end
答案 3 :(得分:2)
关于你的编辑:
如果
is_in?
是[{1}}代替User
的方法,该怎么办?
如果有一个Object
类,我会封装整个事情:
User
答案 4 :(得分:0)
绝对是B和D.如果你有一个长数组,最好把它放在一个变量中。如果您使用该示例执行A和C,它将变为不是DRY(不要重复自己)代码的代码。做B和D将是DRY代码。