美化过长的条件

时间:2014-03-18 23:06:23

标签: ruby

我有一行代码如下:

if a && b && c && d && e && f

是否有推荐的方法来清理它?也许某种方式将它移动到多行?

3 个答案:

答案 0 :(得分:5)

是的,你可以把它写成多行,这在你有很多条件时很常见。

if a && b &&
   c && d &&
   e && f
  do_something
else
  "Well, with all those conditions, it wasn't likely anyway, was it?"
end

(就个人而言,我倾向于将长分组条件组合成变量,以便if-expression中的条件很短,并且很容易遵循逻辑。你可以使用相同的多行语法。 )

答案 1 :(得分:1)

如果这是在方法定义中,如果不满足条件则无需再做任何事情,那么

return unless a
return unless b
return unless c
return unless d
return unless e
return unless f
... # Do something

否则

...
tap do
  break unless a
  break unless b
  break unless c
  break unless d
  break unless e
  break unless f
  ... # Do something
end
...

答案 2 :(得分:-1)

由于所有关于可读性与速度的关系我更新了这个答案,如果速度是一个问题,请添加if Condition.true?在行尾。这种方法的好处是您不需要对需要检查的条件数量进行限制。

class Condition
    @@is = true
    def self.true?
        @@is
    end
    def self.add condition
        @@is = @@is && condition
    end
end

x = 0
Condition.add "a very long string equals" == "a very long string equals" if Condition.true?
puts Condition.true?
Condition.add "a very long string equals" == "another long string" if Condition.true?
puts Condition.true?
Condition.add "a very long string equals" == "another veeeeeeeeeeeeery long string" if Condition.true?
puts Condition.true?
Condition.add x = 1 if Condition.true?

puts Condition.true?
puts x

给出

true
false
false
false
0