Java的一个方法中经常用到了多个return这样好吗?

记得在那里看过说一个函数最好只有一个return语句

阅读 19.7k
6 个回答

有什么不好的。有时用多个return方便很多,干嘛不用。

当然不好,多个return会使返回结果难以预期,你能保证return前的代码没有bug?

不光是java吧,所有的语言都一样,代码在运行到return时就会跳出。
如果函数中有多个判断分支,建议先将返回值存放在变量中,在最后return。

我到是比较纠结return只是用于中断函数执行时到底怎么写?

第一种:

doSomething();
return;

第二种:

return doSomething();

这里return只是为了函数不再往下执行,并不在乎return什么内容。
我用第一种方式,但第二种方式写起来顺手。我的担忧是,第二种方式是否会占用内存,是否给后来维护代码的人带来困惑?

无所谓好不好,如果你不想用多处,那就用 do while false 好了。如下:

Object ret;

L0: do {
    ...

    if (某条件) {
        ret = xxx;
        break L0;
    }
    
    ...
    
    
    ret = YYY;
}
while (false);

return ret;

用的好可以把很深的 if else 代码拉平,逻辑变得清晰。如 这段代码 ,当然了这是我个人的习惯写法,好不好另说了,只是举例用一个 return 的一种方式。

不过一般我推荐我的小组成员尽可能块的结束掉函数体,优先处理错误、简单逻辑,尽可能快速的 return,throw,让代码层级平一些,逻辑清楚些。当然了,得根据实际情况来判断用是不是真的适合这种方式,也有时候不是这样。

return是为了让函数跳出,或者在特定的地方返回特定的值,使用很普遍啊。不需要这么教条吧?

举个例子:
有个String method(int id, String name){};
这里是个查询控制跳转视图的method.条件有以下几个点
id>0跳转到A视图
id>0后判断,如果name=b跳转到B视图
默认跳转到C视图
那么一般情况下代码会这么写:

String redirect = "/view/c";
if(id > 0){
    redirect = "/view/a"
    if(Utils.isNotEmpty(name) && name.equals('b')){
        redirect = "/view/b";
    }
}
return redirect;

以上面代码为栗子,可以改成这样

if(id > 0){
    if(Utils.isNotEmpty(name) && name.equals('b')){
        return "/view/b";
    }
    return "/view/a";
}
return "/view/c";

这样的话,减少了变量,变量是很容易出各种各样的问题的,最大的问题是容易把值弄丢。
以上就是我的看法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题