使bool参数更具可读性

时间:2013-09-17 11:25:35

标签: ruby

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

e.g。

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

你可以看到它正在传递一个字符串以匹配on和一个用户但是true是任何人的猜测。

如何更明确地说明这一点?

5 个答案:

答案 0 :(得分:2)

方法应该只做一件事。如果它需要一个布尔参数,它几乎按照定义两个的东西:如果参数为真,则为1;如果参数为假,则为另一个。 (要不然,或论证无用。)

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

答案 1 :(得分:1)

您可以考虑将Hash与更有意义的符号结合使用。

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

将来,当情况需要更多选项而非真/假时,很容易实现

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

答案 2 :(得分:0)

您可以为该布尔值定义一个常量变量,为其提供一个有用的名称:

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有详细记录,那么值得尊敬的程序员在阅读该行时就没有问题。

答案 3 :(得分:0)

如果您想解释true意味着您可以使用符号:

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

答案 4 :(得分:0)

嗯,其中任何一个都可能有效,具体取决于方法:

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