我正在学习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