我从前谷歌员工的博客那里得到了一些东西。他说谷歌员工曾经有过像if
条件的约定:
if (condition) {
return x;
} else {
return y;
}
但后来谷歌内部改变了这样:
if (condition) {
return x;
}
return y;
似乎SO上有类似或重复的问题(例如this one),我也检查了Oracle official Java Code Conventions。我只是对它们之间的差异感到好奇,即使它可以忽略不计。
我不是在寻找意见或者人们喜欢什么,而是在这里是否存在任何实际的,可辨别的差异,或者它是否只是风格问题。
答案 0 :(得分:2)
我个人想选择
if (condition) {
return x;
} else {
return y;
}
无论是否有大括号,这对我来说都更具可读性。这些是return语句,所以它可能没什么区别。但是我们可以说它们只是语句,如下例所示:
if (condition){
//some statements
} else {
//some related statements
}
此代码随着时间的推移可能会导致类似下面的内容
if (condition){
//some statements
} else {
//some related statements
}
//some totally unrelated statements
在这种情况下,您可以清楚地区分哪些是受条件影响的那些。将来,当你需要重构它时,它可能会更容易。
正如您所看到的,它只是个人品味。我建议您咨询您的主管/架构师/同事,看看他们是否有偏好。作为一个拇指规则,最好选择团队的偏好而不是你自己的偏好。
答案 1 :(得分:0)
这是更好的代码格式化建议之一。
如果您使用的是Eclipse,则可以在“首选项”中启用此警告。 它会让你知道这些代码块,其中有不必要的其他条件。
答案 2 :(得分:0)
从功能上讲,没有区别。就个人而言,我更喜欢第二个,因为我不喜欢添加额外的东西,如果它在程序中没有做任何事情。
从技术上讲,在第二个片段中,你甚至不需要大括号,但是我建议他们在那里提高代码的可读性,并保持快速扫描理解。
我不知道代码将如何转换为JBC,但如果else实际执行了更多指令而不是其他,我不会感到惊讶。
如果你做的不仅仅是简单的回复,我建议使用带括号的else,否则,只需遵循代码片段#2的结构。
答案 3 :(得分:0)
两种情况下的条件得到评估没有区别(功能和性能)。 区别在于代码结构和不同人/组织适用的格式化实践。
有些人认为else
更详细或更明确。
PMD和Findbugs具有else
冗余的代码质量规则(警告级别)。因此,如果您启用了这些代码分析工具的默认模板,则警告报告将包含此类片段/方法调用。
On有多个return
语句,建议(PMD和FindBugs中的类似设置)避免,因为它会降低代码的可读性。对于像你发布的更简单的代码,它看起来没有两个return
,但考虑到复杂的条件逻辑,在不同条件下返回不同的值,理解代码并不容易。
更好(理想)有一些return
陈述,有些人认为只有一个:
int data = DEFAULT;
if(condition) {
data = XYZ;
} else if(condition) {
data = DDD;
}
return data;
答案 4 :(得分:0)
代码逻辑没有区别,我相信在两种情况下都可以编译成完全相同的字节码。它更多的是个人偏好。以下是支持前一种方法的一系列因素:
return
或if
块内完成其执行(else
),第一个代码看起来可能有是这样的。特别是当您的代码增长时,返回状态网络不再那么清晰可见。限制打开的花括号的数量 - 这在我看来更为重要。您应该始终尝试将嵌套块的数量({...}
)限制到最小 - 代码几乎总是更具可读性:
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
}