【发布时间】:2011-06-09 00:33:08
【问题描述】:
编写不带参数但有副作用的方法,改变对象状态,还是带参数并处理它的单参数方法更好?如果第二种选择更可取,是显式返回输入参数还是只处理它更好,因为调用者应该有对它的引用。
更准确地说:我正在处理 XML 并阅读了Clean Code book 的第一章的:
cleanHeader();
extractMetaInfo();
appendStuff();
等等,这些方法都对存储为成员的 XML 文档进行操作。
恕我直言,减少参数数量与没有副作用的最佳实践在这里似乎相互矛盾。写成下面这样会更好吗?
doc = cleanHeader(doc);
doc = extractMetaInfo(doc);
doc = appendStuff(doc);
在这个问题上是否有明确的“正确”?一个明确的答案还取决于多少上下文?还是有第三种我没有想到的选择?
编辑:发现 related question 的答案相互矛盾。需要详细说明吗?
【问题讨论】:
-
副作用是万恶之母。甚至 goto 都没有接近。
-
谢谢你,leppie。这非常明确:) 并且似乎非常合理。您能否提供一个链接/其他信息来支持您的判断?返回原始参数或将其更改为“函数样式”会更好,即隐含的?
-
我强烈推荐阅读这本书:Joshua Bloch 的“Effective Java” - 他在这个特定问题中投票反对(使用参数)。一般来说,出于不同的原因(性能和可用性),Bloch 更喜欢无状态类。 @kostja - 您可以将其用作 leppie 声明的参考
标签: parameters arguments coding-style