约定:if (!foo) vs 除非 (foo).而 (!foo) vs 直到 (foo)



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

if !foo

红宝石提供

unless foo 

此外,代替:

while !foo 

我们有

until foo 

来自 C++/Java,当我阅读 un/untill 时,它似乎让我感到困惑。看起来用 ruby 编程很多的人是否通常使用 除非/直到,而不仅仅是否定 if/while?

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

谢谢!

是的,使用 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 风格指南的语法部分:

赞成,除非是负面条件(或控制流||)。

# 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

最新更新