在Ruby中编写true和false条件语句的首选方法
如果这个问题在某个地方得到了回答,我很抱歉,但我不确定我的措辞是否适合谷歌,而且我还没有在任何风格指南中看到它 既然Ruby有多种方法来显示条件中的否定性,那么编写一个检查一部分为真、一部分为假的条件的首选方法是什么?例如:在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') 或: 或: 或者一个古怪的替身,除非:
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项目,我都会注意到这一点。