输入输出参数与没有副作用的参数相对

时间:2011-01-14 08:37:06

标签: parameters arguments coding-style

编写不带参数且有副作用的方法,更改对象状态或采用参数并处理它的单参数方法是否更好?如果第二种选择更可取,最好是显式返回输入参数还是只处理它,因为调用者应该有一个引用它。

更确切地说:我正在处理XML并阅读了Clean Code book的第一章我试图将Big Processing方法分成许多小方法,所以这个方法可以像故事一样阅读,以下几行:

cleanHeader();

extractMetaInfo();

appendStuff();

等等,这些方法都在作为成员存储的XML文档上运行。

恕我直言,减少参数计数与没有副作用的最佳做法似乎在这里相互矛盾。写下面会更好吗?

doc = cleanHeader(doc);

doc = extractMetaInfo(doc);

doc = appendStuff(doc);

在这个问题上有明确的“权利”吗?一个明确的答案依赖于多少背景?或者有没有第三种选择我没想过?

编辑:发现一个related question的答案相互矛盾。注意详细说明?

2 个答案:

答案 0 :(得分:1)

如果您的algothimen可以被多个线程并行使用,那么干净的代码簿中建议的方式(statfull但没有参数)将不起作用。在这种情况下,您必须使用参数方式!

答案 1 :(得分:0)

我会从OO设计的角度来论证这一点。如果你有一堆操作在同一个对象上的方法,比如doc,那么你可能需要一个包装该对象的类,并将该行为封装到一个bigProcessingMethod()中,调用你希望进一步打破任务的较小处理方法

公共类DocUtil {     私人字符串doc;

public DocUtil(String doc)
{
     this.doc = doc;
}

public bigProcessingMethod()
{
     cleanHeader(doc);

 extractMetaInfo(doc);

 appendStuff(doc);

}

//等。 }

我误解了你的问题。我没有意识到你已经在像DocUtil这样的包装器类中。

无论是否将doc变量显式传递给每个处理方法,您都在相同的内存位置处理相同的对象。我每次传递它的唯一原因是要明确这些是适用于变量doc的方法。

这取决于你。