Language agnostic 仅输出的函数是否应该返回任何内容?

Language agnostic 仅输出的函数是否应该返回任何内容?,language-agnostic,return-value,Language Agnostic,Return Value,我正在将一系列PHP函数重写为一个容器类。这些函数中的许多函数都会进行一些处理,但最终只会将内容回显到STDOUT 我的问题是:我应该在这些函数中有一个返回值吗?就这一点而言,是否有“最佳实践”?如果没有要返回的值,请不要返回值。如果您有一些需要传达给调用者的值,则返回它,但这与本例中的情况不同。您应该: return; 在我看来,SRP(单一责任原则)也适用于方法/功能,而不仅仅适用于对象。一个方法应该做一件事,如果它输出数据,它不应该做任何数据处理——如果它不做处理,它不应该返回数据。处理

我正在将一系列PHP函数重写为一个容器类。这些函数中的许多函数都会进行一些处理,但最终只会将内容回显到STDOUT


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

如果没有要返回的值,请不要返回值。如果您有一些需要传达给调用者的值,则返回它,但这与本例中的情况不同。

您应该:

return;

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

处理会失败吗?如果是,打电话的人是否应该知道?如果其中任何一个都是否,那么我看不到返回值。但是,如果处理可能失败,并且这会对调用方造成影响,那么我建议返回一个状态或错误代码。

在这些情况下,我通常会“return:true”;因为它提供了一种检查函数是否工作的方法。但不确定最佳做法。

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


在使用返回值指示错误的系统中,让所有函数返回错误代码非常有用。这样,用户可以简单地假设每个函数都返回一个错误代码,并开发一个模式来检查它们是否到处都遵循。即使函数现在永远不会失败,也要返回一个成功代码。这样,如果将来的更改使错误成为可能,那么用户将已经在检查错误,而不是隐式地忽略错误(并真正弄不清楚系统为何表现异常)。

请注意,在C/C++中,输出函数(包括)返回写入的字节数,如果失败,则返回-1。也许值得进一步研究,看看为什么会这样做。我承认

  • 我不确定向stdout写入数据实际上会失败(除非您主动关闭stdout流)
  • 我从未见过有人收集这个值,更不用说用它做任何事情了
  • 请注意,这与写入文件流不同-我不计算shell中的流重定向。

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

    在实践中,我经常发现让这些函数返回它们刚刚打印的文本通常是有用的(有时您还希望通过电子邮件发送错误消息或将其反馈给其他函数)


    最后,选择权在你。我想说,这取决于你对这些事情的“纯粹主义”程度。

    没有必要返回任何东西,或者确实需要一个返回语句。它实际上是一个空函数,而且它是可以理解的,这些函数没有返回值。提交一份“回报”仅仅有一个return语句是为了卖弄学问而发出的噪音。

    或者,只有在例外情况下,才可以提出例外。如果处理失败是相对正常的,那么不,不要。我是那种认为读取文件时出现EOF异常非常奇怪的人,因为EOF是一种预期条件。也许你应该阅读