Ruby on rails 约定:if(!foo)vs除非(foo)。而while(!foo)vs until(foo)

Ruby on rails 约定:if(!foo)vs除非(foo)。而while(!foo)vs until(foo),ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习Ruby和RoR,并注意到 if !foo ruby提供 unless foo 此外,不是: while !foo 我们有 until foo 来自C++/Java,当我阅读uncler/until时,它似乎把我弄糊涂了。用ruby编写大量程序的人是否会习惯性地使用除非/直到,而不仅仅是否定if/while 这是我应该习惯的事情,还是你在这个问题上看到了很多差异 谢谢 是,使用除非条件,而不是如果!条件是常见且惯用的 unless foo # ... end 它特别

我正在学习Ruby和RoR,并注意到

if !foo
ruby提供

unless foo 
此外,不是:

while !foo 
我们有

until foo 
来自C++/Java,当我阅读uncler/until时,它似乎把我弄糊涂了。用ruby编写大量程序的人是否会习惯性地使用除非/直到,而不仅仅是否定if/while

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


谢谢

是,使用
除非条件,而不是
如果!条件
是常见且惯用的

unless foo
  # ...
end
它特别常见于用作post条件:

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

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

如有疑问,请按照以下部分的语法部分进行操作:

若为不利条件(或控制流| |),则表示赞成,除非超过

在消极的情况下,支持直到结束


只是习惯的力量,它已经被编辑过了。
# 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