我该如何从函数中返回一个值?

时间:2012-01-11 13:46:07

标签: java function

我在这里看到三种方式:

1)make函数显式返回该值

2)在函数的参数列表中添加附加参数,并将字符串holder作为该参数传递。函数完成执行后,该字符串持有者将包含函数的结果。

3)从包含结果的函数中抛出异常。

我为自己看第一选择更为可取,因为它简单,直观和直接。

另一方面,当函数执行错误时,可能会有其他选择,如抛出异常或使用通过参数传递的变量来保存错误(如果发生)。

直观地说,我认为理想的选择是具有显式的返回值和抛出声明。因此返回值用于正常执行,捕获异常将发出异常情况的信号。但是,如果只是不是完全不可预测的错误,我自己也不喜欢异常,所以我使用显式返回值和附加参数来保存一些额外情况日志或错误。

请告知有关该主题的书籍或文章(不应该谈论Java,任何其他具有类似机制的语言也是合适的。)

4 个答案:

答案 0 :(得分:5)

你绝对想要选项#1。例外不是不可预测的;如果你正确使用它们,它们实际上是完全可以预测的。您可以根据错误(FileNotFoundException,IllegalArgumentException,SomeConditionSpecificToMyAppException等)抛出不同的异常类型,这些异常可以包含您需要传达的任何错误或诊断信息。

以下是有关例外的Java SE教程中的一个很好的部分:http://docs.oracle.com/javase/tutorial/essential/exceptions/

答案 1 :(得分:2)

Java方法有返回值的原因是:返回结果。在绝大多数情况下,#1应该是您的唯一选择。即使你想要返回一个包装对象,例如因为你需要返回多个值,你可能只需要return这个东西......

例外情况就是:它们处于特殊(即异常)的情况下。由于传统上抛出异常也意味着性能影响,因此在正常操作期间不应抛出异常。

你为什么要迷惑自己?

修改

另一方面,异常非常适合罕见/异常情况:

  • 他们内置支持生成调试信息。获得堆栈跟踪是处理大多数错误的一半。

  • 所有体面的调试器都允许将抛出的异常用作断点,这非常有用。

  • 异常允许错误条件相对透明地向上传递方法调用链,允许错误处理代码按照所需的粒度放置。

  • 异常是处理Java中错误情况的标准方法。这对大多数程序员来说应该足够了。请尊重那些必须使用您的代码并且不要通过重新发明轮子来破坏这些基本惯例的人......

答案 2 :(得分:1)

我几乎每次都会使用选择1。没有什么可以阻止你根据需要抛出异常。

答案 3 :(得分:1)

请阅读Steve McConnell撰写的Code Complete。它就在那里。