Ruby社区意见:多个或声明还是单个包含?

时间:2013-11-15 17:30:47

标签: ruby coding-style

关于什么更符合红宝石标准的快速提问。

示例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的方法,该怎么办?

5 个答案:

答案 0 :(得分:8)

如果使用rails(或仅active_supportcore 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代码。