方法中的布尔参数。为什么不?

时间:2012-02-24 05:26:11

标签: ruby-on-rails reek

我正在使用reek作为我的代码中最佳做法的分析工具。但是最近我发现如果在方法中,我有布尔参数,比如。

def method (flag = true)

reek给了我一个警告。为什么reek告诉我这是一个警告?

3 个答案:

答案 0 :(得分:3)

在我写这篇文章之前的几年,我在这里写了一篇关于这段代码的博客:http://silkandspinach.net/2004/07/15/avoid-boolean-parameters/

布尔参数的问题都与复制和SRP有关:被调用的方法有两个职责,调用者知道它想要调用哪一个。

答案 1 :(得分:0)

标志变量被视为不良做法。这是因为它固有地违反了功能应该只做一件事的原则。通过传入一个布尔标志,你会说,“如果它是真的那就做,如果它是假的”,这是两件事。

答案 2 :(得分:0)

老问题,但我想我会为那些从谷歌进来的人添加我的想法:

在某些情况下,单独的方法很好,但在我看来,更好的选择是:

kredit_member_no

这还可以包括检查标志是否实际上是布尔值:

def method(option = {:flag => false})
  options[:flag] ? doFoo : doBar
end

method(:flag => true)