在Ruby中,除非特殊情况,否则我们是否应始终使用“&&”,“||”而不是“and”,“或”?

在大多数情况下,在Ruby中,最好使用&&|| 代替andor ,除非是某些特殊情况。

我认为Ruby的一个设计原则是尽可能减少意外,所以使用andor实际上有一些惊喜……例如and没有比or更高的优先级,而&&的优先级高于||

所以我认为在大多数情况下,使用&&|| 。 在某些特殊情况下,它可能需要使用andor ,但我认为如果它们与&&||混合使用 迟早,当您不久前在Ruby中开始工作的同事需要编辑您的代码时,它迟早会产生错误。

是。 依赖于andor用于布尔逻辑是将微妙的错误引入应用程序的好方法。

但他们确实有一席之地。 当用作控制流操作符时,它们是安全且可读的选项。

 redirect_to root_url and return 

在阅读这篇优秀博客文章之前,我基本上都有这种感觉。

“ruby编程语言”(David Flanagan和Yukihiro Matsumoto)一书给出了使用’和’的两个理由。

  • 可读性:

    if x > 0 and y > 0 and not defined? d then d = Math.sqrt(x*x +y*y) end

  • 充分利用较低的优先顺序:

    if a = get_from_db(x) and b = get_from_db(y) then do_stuff_with_true_values(a, b) end

(由我修改的代码)最后一个不适用于’&&’。

就个人而言,为了便于阅读,我使用’和’和’或’与括号结合,以便于阅读.-

这是因为andor not优先于&&||优先级 而且!

为什么? 因为它源于Perl。 作为语言学家的拉里沃尔希望以下工作:

 open my $fh, "<", $filename or die $!; 

如果你用||替换or 然后该语句将被解析如下:

 open my $fh, "<", ($filename || die $!); 

哪个不好!

因此对于像Perl和Ruby这样的语言,其中括号通常是可选的,那么这就是解决方案。 否则你需要写:

 open( my $fh, "<", $filename ) || die $!; 

请参阅Perlop“ Perl和Ruby中的Logical Not,And,or,Defined or,和Exclusive或 && 逻辑运算符” 。

/ I3az /