1

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

例如

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

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

我怎样才能使这更明确?

4

5 回答 5

2

一个方法应该只做一件事。如果它接受一个布尔参数,根据定义,它几乎会做件事:一件事如果参数为真,另一件事如果参数为假。(要么这样,要么争论是无用的。)

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

于 2013-09-17T11:32:38.777 回答
1

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

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

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

result = MyQuery.match "bala", user, {alive: unlikely}
于 2013-09-17T11:33:04.517 回答
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 有很好的文档记录,那么一位受人尊敬的程序员在阅读该行时不会有任何问题。

于 2013-09-17T11:29:17.387 回答
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
于 2013-09-17T11:34:58.507 回答
0

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

result = MyQuery.match "aa", user, :meaning_of_true
于 2013-09-17T11:33:03.193 回答