1

我从一位前 Google 员工的博客中得到了一些东西。他说 Google 员工曾经对 Javaif条件有这样的约定:

if (condition) {
    return x;
} else {
    return y;
}

但后来在谷歌内部,它变成了这样:

if (condition) {
    return x;
}
return y;

似乎在 SO 上有类似或重复的问题(例如这个),我还为此检查了Oracle 官方 Java 代码约定。我只是对它们之间的差异感到好奇,即使它可以忽略不计。

我不是在寻找意见或人们喜欢什么,而是在这里是否有任何实际的、可辨别的差异,或者它是否真的只是风格问题。

4

5 回答 5

2

我个人想选择

if (condition) {
    return x;
} else {
    return y;
}

这对我来说更具可读性,不管有没有大括号。这些是返回语句,因此可能没有太大区别。但是可以说它们只是陈述,如下例所示:

if (condition){
    //some statements
} else {
    //some related statements
}

随着时间的推移,此代码可能会导致如下所示

if (condition){
    //some statements
} else {
    //some related statements
}
//some totally unrelated statements

在这种情况下,您可以清楚地区分哪些是受条件影响的。将来,当您需要重构它时,它可能会更容易。

如您所见,这只是个人口味。我建议您与您的主管/建筑师/同行核实,看看他们是否有偏好。作为一个经验法则,最好选择团队的偏好而不是你自己的偏好。

于 2013-08-05T05:27:58.477 回答
0

这是更好的代码格式化建议之一。

如果您使用的是 Eclipse,您可以在 Preferences 中启用此警告。它将让您知道存在不必要的 else 条件的此类代码块。

于 2013-08-05T05:15:17.493 回答
0

从功能上讲,没有区别。就个人而言,我更喜欢第二个,只是因为如果它在程序中没有做任何事情,我不喜欢添加额外的东西。

从技术上讲,在第二个片段中,您甚至不需要花括号,但是我建议它们在那里以提高代码的可读性并保持快速扫描理解。

我不太清楚代码将如何转换为 JBC,但如果 else 实际上比没有 else 时执行了更多的指令,我不会感到惊讶。

如果您要做的不仅仅是简单的返回,我建议您使用带大括号的 else,否则,只需遵循片段 #2 的结构即可。

于 2013-08-05T05:16:05.103 回答
0

代码的逻辑没有区别,我相信在这两种情况下它甚至可以编译成完全相同的字节码。更多的是关于个人喜好。以下是支持前一种方法的因素的简短列表:

  1. 没有第一个示例中的“第三种选择”。尽管 Java 编译器足够聪明,可以检测到这一点,但函数无法在内部或块内完成其执行 ( return) ,但第一个代码看起来可能存在这种情况。尤其是当您的代码长大后,返回语句不再那么清晰可见。ifelse
  2. 限制打开的大括号的数量 - 我认为这更重要。您应该始终尝试将嵌套块 ( {...}) 的数量限制在最低限度 - 这样代码几乎总是更具可读性:

    for (...) {
        if (...) {
            if (...) {
                // this sucks, 3 levels of indention
            }
        }
    }
    
    for () {
        if (!...) {
            continue;
        }
    
        if (!...) {
            continue;
        }
    
        // maybe there's more code but it's much easier to read and maintain
    }
    
于 2013-08-05T05:47:07.770 回答
0

由于评估了两种情况下的条件,因此没有区别(功能和性能)。不同之处在于代码结构和格式化实践不同的人/组织适用。

有些人认为拥有else更冗长或更明确。

PMDFindbugselse具有冗余的代码质量规则(警告级别) 。因此,如果您启用了这些代码分析工具的默认模板,警告报告将包含此类片段/方法调用。

在有多个return语句时,建议避免(同样在 PMD 和 FindBugs 中进行类似设置),因为它会降低代码的可读性。对于像您发布的更简单的代码,看起来可以有两个return,但考虑使用复杂的条件逻辑,在不同的条件下返回不同的值,理解代码并不容易。最好(理想)有较少的return陈述,有些人认为只有一个:

int data = DEFAULT;
if(condition) {
  data = XYZ;
} else if(condition) {
  data = DDD;
}
return data;
于 2013-08-05T05:26:46.050 回答