Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

7年前关闭。



Improve this question




每当我看到一个方法是参数之一时,就会像output parameter
void addTokenErrorsToReport(List<String> tokens, Map<String, Integer> report)

我感觉这完全是错误的。从我的角度来看,参数通常应该是不可变的,并且不能在方法内更改。例如,上述方法可以重写为
Map<String, Integer> createTokenErrorsReport(List<String tokens)

然后可以将返回的Map与原始报告Map合并。

这个假设正确吗?还是两个版本都可以接受?

最佳答案

与大多数事情一样,如果它导致功能不良/不可读/难以维护的代码,或者您不知道为什么这样做,则只是“不好的做法”。

在大多数情况下,使用输出参数不会产生这些影响。

在您的addTokenErrorsToReport中,这当然是一种适当的方法。您正在向报告中添加 token 错误-函数需要知道要添加的 token 以及要添加到的报告。该功能显然可以精确地执行其设计要执行的操作,而没有任何缺点。

如果要使用createTokenErrorsReport方法,则必须通过在现有报告中插入新标记来跟踪对它的每次调用。如果将标记添加到现有报告中是常见的操作,那么绝对有必要添加一种方法。这并不是说createTokenErrorsReport也不应存在-如果从 token 列表创建新报告是一项常见操作,那么您将需要执行此操作的函数。

很好地使用输出参数的一个很好的例子是Collections.sort,它可以对列表进行适当排序。避免了创建列表的新副本并返回排序后的副本对性能的影响,同时,如果您愿意的话,它也不会限制您创建副本和对副本进行排序。

只需使用最好的工具来完成工作,并保持代码简洁即可。

10-06 08:48
查看更多