Ruby 使bool参数更具可读性

Ruby 使bool参数更具可读性,ruby,Ruby,我希望避免将true作为参数传递给方法,因为对于第一次阅读代码的任何人来说,它都没有意义: e、 g 您可以看到,它正在传递一个字符串以匹配用户和用户,但真实情况是任何人都可以猜测的 如何使其更明确?您可以为该布尔值定义一个常量变量,并给它一个有用的名称: MEANING_OF_TRUE = true result = MyQuery.match "aa", user, MEANING_OF_TRUE 您还可以明确注释true值的含义: result = MyQuery.match "aa",

我希望避免将true作为参数传递给方法,因为对于第一次阅读代码的任何人来说,它都没有意义:

e、 g

您可以看到,它正在传递一个字符串以匹配用户和用户,但真实情况是任何人都可以猜测的


如何使其更明确?

您可以为该布尔值定义一个常量变量,并给它一个有用的名称:

MEANING_OF_TRUE = true
result = MyQuery.match "aa", user, MEANING_OF_TRUE
您还可以明确注释
true
值的含义:

result = MyQuery.match "aa", user, true # because ...
最后,您还可以打开
MyQuery
并在其中定义一个常量:

class MyQuery
    MEANING_OF_TRUE = true
    MEANING_OF_FALSE = false
end
# ...
result = MyQuery.match "aa", user, MyQuery::MEANING_OF_TRUE

但是你不应该真的担心这个。如果你的API有很好的文档,一个值得尊敬的程序员在阅读这行代码时不会有问题。

一个方法应该只做一件事。如果它接受一个布尔参数,根据定义它可以做两件事:一件是参数为真,另一件是参数为假。(要么如此,要么这个论点毫无用处。)


提供两个具有合理名称的方法几乎总是更好的。

如果您想解释
true
的含义,您可以使用符号:

result = MyQuery.match "aa", user, :meaning_of_true

可以考虑使用<代码>哈希< /C> >一个更有意义的符号。

result = MyQuery.match "bala", user, {alive: true}
将来,当情况需要更多的选择而不是真/假时,它很容易实现

result = MyQuery.match "bala", user, {alive: unlikely}

好吧,根据方法的不同,这些方法中的任何一种都可能有效:

OPTION = true
MyQuery.match "aa", user, OPTION

option = true
MyQuery.match "aa", user, option

MyQuery.match "aa", user, option = true

MyQuery.match "aa", user, :option

MyQuery.match "aa", user, option: true

match
是我们自己的方法,还是一块你无法控制的宝石?几周前,RubyTapas有一个关于这个特定问题的插曲。寻找第119集,意图揭示论点。()除了Bala的评论之外,这可能是一篇有趣的文章:你能修复你的
?请注意,如果散列是最后一个参数,大括号是可选的,这使得它更漂亮!
result=MyQuery.match“Bala”,user,alive:true
OPTION = true
MyQuery.match "aa", user, OPTION

option = true
MyQuery.match "aa", user, option

MyQuery.match "aa", user, option = true

MyQuery.match "aa", user, :option

MyQuery.match "aa", user, option: true