从具有隐式或显式“else”或单个“return”语句的方法返回?

2022-09-02 19:26:26

有些人认为多个 return 语句是糟糕的编程风格。虽然对于较大的方法也是如此,但我不确定对于较短的方法是否可以接受。但还有另一个问题:如果前一个中有返回语句,是否应该明确地写出来?elseif

含蓄:else

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    return uriInfo.getMatchedResources().get(0).getClass().toString();
}

明确:else

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    else
        return uriInfo.getMatchedResources().get(0).getClass().toString();
}

从技术上讲,这里没有必要,但它使意义更加明显。else

也许是单次回报的最干净的方法:

private String resolveViewName(Viewable viewable) {
    String templateName;
    if(viewable.isTemplateNameAbsolute())
        templateName = viewable.getTemplateName();
    else
        templateName = uriInfo.getMatchedResources().get(0).getClass().toString();
    return templateName;
}

你更喜欢哪一个?其他建议?


答案 1

其他明显的建议:使用条件运算符。

private String resolveViewName(Viewable viewable) {
    return viewable.isTemplateNameAbsolute()
        ? viewable.getTemplateName()
        : uriInfo.getMatchedResources().get(0).getClass().toString();
}

对于这不可行的情况,我几乎肯定是不一致的。老实说,我不会太担心它 - 这不是那种可读性受到显着影响的事情,而且不太可能引入错误。

(另一方面,我建议对所有块使用大括号,即使是单个语句块。if


答案 2

我更喜欢最干净的方法,单次返回。对我来说,代码是可读的,可维护的,而不是令人困惑的。明天,如果您需要添加一些行到if或否则阻止它很容易。

1.)代码永远不应该是聪明的。