在Ruby中编写true和false条件语句的首选方法

在Ruby中编写true和false条件语句的首选方法,ruby,coding-style,logic,Ruby,Coding Style,Logic,如果这个问题在某个地方得到了回答,我很抱歉,但我不确定我的措辞是否适合谷歌,而且我还没有在任何风格指南中看到它 既然Ruby有多种方法来显示条件中的否定性,那么编写一个检查一部分为真、一部分为假的条件的首选方法是什么?例如: if array && !array.include?('Bob') #do stuff! 但你也可以说: if array #do stuff! unless array.include?('Bob') 或: 或: 或者一个古怪的替身,除非:

如果这个问题在某个地方得到了回答,我很抱歉,但我不确定我的措辞是否适合谷歌,而且我还没有在任何风格指南中看到它

既然Ruby有多种方法来显示条件中的否定性,那么编写一个检查一部分为真、一部分为假的条件的首选方法是什么?例如:

if array && !array.include?('Bob')
  #do stuff!
但你也可以说:

if array
  #do stuff! unless array.include?('Bob')
或:

或:

或者一个古怪的替身,除非:

unless array.nil?
  #do stuff unless array.include?('Bob')

还有其他几个。你知道哪一个是最红的吗?支持您观点的资料来源?

就文档化的指南而言,我能想到的唯一一件事就是谷歌指南,它告诫“不要使用
;始终使用
&
|

除此之外,这在某种程度上取决于上下文。如果一个条件为真,另一个条件为假,那么我肯定会将它们放在一个If中,使用
&&

if array && !array.include?('Bob')
  #do stuff!
另一方面,如果第一个条件为真,即使第二个条件也为真,也可能会执行附加代码;在这种情况下,嵌套的
,除非
if
有意义:

if array 
    do stuff! unless array.include? 'Bob'
    do other stuff anyway
end

就文档化的指南而言,我能想到的唯一一件事就是谷歌指南,它告诫“不要使用
;始终使用
&
|

除此之外,这在某种程度上取决于上下文。如果一个条件为真,另一个条件为假,那么我肯定会将它们放在一个If中,使用
&&

if array && !array.include?('Bob')
  #do stuff!
另一方面,如果第一个条件为真,即使第二个条件也为真,也可能会执行附加代码;在这种情况下,嵌套的
,除非
if
有意义:

if array 
    do stuff! unless array.include? 'Bob'
    do other stuff anyway
end

虽然没有提高可读性,但仍然很有趣

如果您使用Rails,则可以使用ActiveSupport扩展,如下所示:

if array.try(:include?, 'Bob')
  # Do stuff

虽然没有提高可读性,但仍然很有趣

如果您使用Rails,则可以使用ActiveSupport扩展,如下所示:

if array.try(:include?, 'Bob')
  # Do stuff

在给定的上下文中,做任何最具可读性的事情,注意“可读性”通常是优先考虑的问题。注意(喜欢),虽然我不认为这在您的示例中有什么不同,但值得知道。在给定的上下文中,做任何最具可读性的事情,注意“可读性”这通常是一个偏好问题。请注意(like),虽然我不认为这在您的示例中有什么不同,但值得了解。我认为整个“不要使用
/
任何时候”的教条都是荒谬的。相反,在它们有意义的时候使用它们,就像其他语言功能一样。我倾向于同意,@AndrewMarshall。我只是参考了我能想到的唯一一个模糊相关的Ruby风格文档,这在我的脑海中是新鲜的,因为优先级问题。您对附加代码@MarkReed的观点很好,但我特别想到了一行示例。我认为,在你的例子中,额外代码的存在有助于形成一个更具逻辑性的流程。我认为整个“不要使用
/
任何时候”的教条都是荒谬的。相反,在它们有意义的时候使用它们,就像其他语言功能一样。我倾向于同意,@AndrewMarshall。我只是参考了我能想到的唯一一个模糊相关的Ruby风格文档,这在我的脑海中是新鲜的,因为优先级问题。您对附加代码@MarkReed的观点很好,但我特别想到了一行示例。我认为,在您的例子中,附加代码的存在有助于形成更具逻辑性的流程。我的是一个本地Ruby脚本,但对于我处理的任何rails项目,我都会注意到这一点。rails也是特定的。我的是一个本地Ruby脚本,但对于我处理的任何rails项目,我都会注意到这一点。