编写不带参数且有副作用,改变对象状态或带参数并处理它的单参数方法的方法会更好吗?如果第二种方法更可取,那么最好是显式地返回输入参数还是仅仅处理它,因为调用者应该有一个对它的引用。输入输出参数与不带副作用的参数
更确切地说:我正在处理XML并阅读了第一章的Clean Code book我试图将大处理方法拆分为许多小方法,因此这种方法可以像故事那样读取:
cleanHeader();
extractMetaInfo();
appendStuff();
等等,其中这些方法都是对作为成员存储的XML文档进行操作。
恕我直言,减少参数计数与没有副作用的最佳做法似乎在这里相互矛盾。如下写作会更好吗?
doc = cleanHeader(doc);
doc = extractMetaInfo(doc);
doc = appendStuff(doc);
在这个问题上是否有明确的“正确”?一个明确的答案依赖于多少上下文?还是有第三种选择我没有想过?
编辑:发现一个related question与矛盾的答案。谨慎阐述?
副作用是所有邪恶的母亲。甚至没有得到接近。 – leppie 2011-01-14 09:11:06
谢谢你,leppie。这是相当明确:)并且似乎非常合理。你能否提供一个链接/其他信息来支持你的判断?最好是返回原始的论点还是改变它的“功能风格”,即,含蓄? – kostja 2011-01-14 09:17:59
我强烈推荐阅读Joshua Bloch撰写的“有效的Java”一书 - 他在这个具体问题中投票反对(使用参数)。在一般布洛赫prefere无国籍班不同的原因(性能和可用性)。 @kostja - 你可以用它作为leppie语句的参考 – Ralph 2011-01-26 16:26:09