我想避免将 true 作为参数传递给方法,因为它对第一次阅读代码的任何人都没有意义:
例如
result = MyQuery.match "aa", user, true
您可以看到它正在传递一个字符串以匹配一个用户,但真实情况是任何人的猜测。
我怎样才能使这更明确?
我想避免将 true 作为参数传递给方法,因为它对第一次阅读代码的任何人都没有意义:
例如
result = MyQuery.match "aa", user, true
您可以看到它正在传递一个字符串以匹配一个用户,但真实情况是任何人的猜测。
我怎样才能使这更明确?
一个方法应该只做一件事。如果它接受一个布尔参数,根据定义,它几乎会做两件事:一件事如果参数为真,另一件事如果参数为假。(要么这样,要么争论是无用的。)
提供两个具有合理名称的方法几乎总是更好。
您可以考虑使用Hash
更有意义的符号。
result = MyQuery.match "bala", user, {alive: true}
将来,当情况需要比真/假更多的选项时,很容易实现
result = MyQuery.match "bala", user, {alive: unlikely}
您可以为该布尔值定义一个常量变量,给它一个有用的名称:
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 有很好的文档记录,那么一位受人尊敬的程序员在阅读该行时不会有任何问题。
好吧,根据方法,这些中的任何一个都可能起作用:
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
如果您想解释true
可以使用符号的含义:
result = MyQuery.match "aa", user, :meaning_of_true