ruby:如果和除非如何结合

时间:2017-08-31 21:57:55

标签: ruby

我使用if和除非

以下示例代码
if key.start_with('abc')
   do something
end

unless key.start_with('abc')
   do that
end

这是将if和除非或是否有其他方式结合起来的正确方法?

if key.start_with('abc')
   do something
elsif !key.start_with('abc')
   do that
else
   do this
end

由于

3 个答案:

答案 0 :(得分:1)

如果检查if key.start_with('abc')失败,则表示它不以abc开头,因此无需检查该条件。它们是直接对立的,所以如果一个是真的,另一个是假的,因此,普通if / else就足够了:

if key.start_with('abc')
   do something
else
   do that
end

正如我在评论中所述,您设置if / elsif / else的方式取决于您的条件如何相互关联。如果它们都是相互排斥的,那么它可以简单地类似于:

if condition1
   do first thing
elsif condition2
   do 2nd thing
else
   do fallback thing
end

但是,您可能需要检查许多不同的方法:

if condition1
   do a thing
elsif condition2 || condition3
   do something if 1 is false, but either either 2 or 3 are true
elsif condition4
   do something if 1,2, & 3 are all false
elsif condition5 && condition6
   do something only if both 5 and 6 are true (and all above are false)

等等

答案 1 :(得分:1)

可能在此处混淆条款。在Ruby中,unless相当于if !condition

如果您想确保根据单个条件发生或不发生某些事情,您需要检查的是那个条件。在您的示例中,它将是:

if key.start_with('abc')
 do something
else
  do that
end

key.startWith('abc')是真还是假。没有理由检查额外的false语句,因为在执行后必须为假。

答案 2 :(得分:1)

查看红宝石样式指南: https://github.com/bbatsov/ruby-style-guide#no-else-with-unless

对于大多数控制流程案例,我会远离unless,因为它会很快变得混乱,除了以下内容:

  • 一个班轮:

do that unless key.start_with('abc')

  • 或保护条款:

return unless key.start_with('abc')