Ruby 美化过长的条件句

Ruby 美化过长的条件句,ruby,Ruby,我有一行代码,看起来像: 如果a&&b&&c&&d&&e&&f 有没有推荐的方法来清理这个?也许可以通过某种方式将其移动到多行?如果这是在方法定义中,并且如果条件不满足,则无需执行更多操作,则 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 brea

我有一行代码,看起来像:

如果a&&b&&c&&d&&e&&f


有没有推荐的方法来清理这个?也许可以通过某种方式将其移动到多行?

如果这是在方法定义中,并且如果条件不满足,则无需执行更多操作,则

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
...

是的,您可以将其写为多行,当您有大量的条件时,这是非常常见的

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

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

因为这都是关于可读性和速度的问题,我更新了这个答案,如果速度是一个问题,请添加if条件。真的吗?在队伍的尽头。这种方法的好处是,您对需要检查的条件数量没有限制

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
给予


我不太喜欢这种方法,因为它包括重复,即使它只是“return/break-除非”语句。您在这个问题上得到的答案可能只会帮助您从外观上改进代码。如果您有那么多的连接条件,那么您的程序可能存在更严重的结构问题。如果你有这么多的参数和条件,我会考虑状态机。+ 1的描述性变量(也短方法OK)HMM,这对我来说似乎很混乱(我不是下沉者)。无论如何,我觉得使用数组意味着每次都要对所有内容进行评估,因此您不妨使用
all?
。在评估之后,对all进行所有比较,而不是对我的解决方案进行比较。比较不是问题,评估才是问题。考虑这个条件:<代码> false & &用户。find((all))< /代码>。
User.find(:all)
不需要被调用(并且不需要常规短路),但它可以与您的解决方案一起调用。这是正确的,所以我只会在您有很长的条件,否则很难读取,并且可读性比执行速度更重要,或者条件的评估不需要太多时间的情况下使用此解决方案time@pguardiario我更新了一个不那么混乱的答案如果你不想这样,我希望你不要评估
true
false
false
false
0