惯例:if(!foo)vs除非(foo)。而(!foo)vs(foo)

时间:2013-12-20 21:50:20

标签: ruby-on-rails ruby

我正在学习Ruby和RoR,并注意到它不是使用

if !foo

ruby​​提供

unless foo 

此外,而不是:

while !foo 

我们有

until foo 

来自C ++ / Java,当我阅读时,似乎只会让我感到困惑,除非/直到。看起来像是在ruby中编程很多的人除非/直到否定if / while?

这是我应该习惯的事情,还是你看到很多关于这个问题的差异?

谢谢!

2 个答案:

答案 0 :(得分:5)

是的,使用unless condition代替if !condition是常见且惯用的。

unless foo
  # ...
end

作为后期条件使用尤为常见:

# Bad
raise "Not Found" if !file_exists?(file_name)

# Good
raise "Not Found" unless file_exists?(file_name)

如有疑问,请按ruby-style-guide

答案 1 :(得分:5)

来自ruby style guide的语法部分:

  

除非对于负面条件(或控制流程||),否则不要超过。

# bad
do_something if !some_condition

# bad
do_something if not some_condition

# good
do_something unless some_condition

# another good option
some_condition || do_something

  

对于负面条件,请等到结束。

# bad
do_something while !some_condition

# good
do_something until some_condition