应该只输出任何东西的函数吗?

时间:2009-03-30 21:04:07

标签: language-agnostic return-value

我正在将一系列PHP函数重写为容器类。其中许多函数都进行了一些处理,但最后只是将内容回显给STDOUT。

我的问题是:我应该在这些功能中有一个返回值吗?就这一点而言,是否存在“最佳实践”?

9 个答案:

答案 0 :(得分:4)

处理能否失败?如果是这样,打电话者应该知道吗?如果其中任何一个不是,那么我在回报中看不到价值。但是,如果处理失败,并且可能对调用者产生影响,那么我建议返回状态或错误代码。

答案 1 :(得分:4)

在主要通过异常报告错误的系统中,如果没有返回值,则不返回返回值。

在使用返回值指示错误的系统中,让所有函数返回错误代码很有用。这样,用户可以简单地假设每个函数都返回一个错误代码并开发一个模式来检查它们是否随处可见。即使函数现在永远不会失败,也要返回成功代码。这样,如果未来的更改可能会出现错误,那么用户就已经在检查错误而不是默默地忽略它们(并且真的很困惑为什么系统行为奇怪)。

答案 2 :(得分:2)

如果没有要返回的值,请不要返回值。如果你有一些值,你需要传达给调用者,然后返回它,但这听起来不像这种情况。

答案 3 :(得分:1)

我会经常“回归:真实;”在这些情况下,因为它提供了一种检查功能是否有效的方法。但不确定最佳做法。

答案 4 :(得分:1)

请注意,在C / C ++中,输出函数(包括printf())返回写入的字节数,如果失败则返回-1。可能值得进一步调查这一点,看看为什么这样做了。我承认

  1. 我不确定写入stdout实际上是否会失败(除非你主动关闭STDOUT流)
  2. 从未看到有人收集此值,更不用说用它做任何事了。
  3. 请注意,这与写入文件流不同 - 我不计算shell中的流重定向。

答案 5 :(得分:1)

要做“正确”的事情,如果方法的目的只是打印数据,那么它不应该返回任何东西。

在实践中,我经常发现有这样的功能会返回他们刚刚打印的文本通常很有用(有时你也想通过电子邮件发送错误信息或将其提供给其他功能)。

最后,选择权归你所有。我会说这取决于你对这些事情的“纯粹主义”有多大。

答案 6 :(得分:0)

你应该只是:

return;

答案 7 :(得分:0)

在我看来,SRP(单一责任原则)也适用于方法/功能,而不仅适用于对象。一种方法应该做一件事,如果它输出数据它不应该做任何数据处理 - 如果它不进行处理它不应该返回数据。

答案 8 :(得分:0)

没有必要返回任何内容,或者确实有返回声明。它实际上是一个无效函数,并且可以理解它们没有返回值。投入'回归'仅仅为了拥有一个返回语句就是为了迂腐而产生的噪音。