不必要的'其他'声明

Vit*_*nko 21 java eclipse coding-style

如您所知,在Eclipse中,您可以启用" 不必要的'else'语句 "检查,这将在if-then-else上触发,提前返回.而且,根据我的经验,使用此类声明时有两种最可能的情况:

1)预检:

if (!validate(arg1)) {
    return false;
}
doLotOfStuff();
Run Code Online (Sandbox Code Playgroud)

2)检查后:

doLotOfStuff();
if (condition) { 
    return foo; 
} else {
    return bar; 
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,如果触发器打开,Eclipse将建议您将代码更改为:

doLotOfStuff();
if (condition) { 
    return foo; 
} 
return bar; 
Run Code Online (Sandbox Code Playgroud)

但是,我认为使用else语句返回更具可读性,因为它类似于业务逻辑的直接映射.如果这个"不必要的'其他'声明"代码约定很普遍,或者使用else语句的代码更优选,那么我很好奇吗?

And*_*mer 19

通常我更喜欢代码的结构遵循底层"业务"逻辑的结构.在这种情况下,我的方法将取决于condition代表什么.如果是错误检查,例如,通常不会被命中但偶尔会被使用,那么第二种形式的不对称性与逻辑的不对称性相匹配.

doLotOfStuff();
if (condition) { 
    return foo; 
} 
return bar; 
Run Code Online (Sandbox Code Playgroud)

但是,如果任何一种可能性是合理的并且它只是它们之间的选择,我将允许代码的结构显示对称性.

doLotOfStuff();
if (condition) { 
    return foo; 
} else {
    return bar; 
}
Run Code Online (Sandbox Code Playgroud)

代码在那里供程序员阅读,而不是编译器.


cle*_*tus 11

曾经考虑过(并且可能仍然是某些人)函数应该有一个入口点(容易但在考虑汇编语言时是相关的)和一个出口点.

从调试的角度来看,一个退出点是很好的(因为你可以在一条线上放置一个监视/休息并且知道你会经历它),但是可能导致一些可怕的嵌套,因此更多的可读性往往会胜出.哪个产生最少的嵌套,最少的代码行和最可读的最终结果?最终,这往往比其他任何事情都重要得多.

对于它的价值,最后可以更好地表达为:

return condition ? foo : bar;
Run Code Online (Sandbox Code Playgroud)

假设condition不是非常长.

不要过分担心所谓的代码"纯度".这是一种无关紧要的分心.使事物可读并且通常是一致的.

  • +1:深度嵌套肯定会损害可读性.让我们面对现实,大多数函数都是"检查一堆前提条件,进行处理,强制执行后置条件",当应用于前提条件语法的愚蠢规则扼杀函数的主要目的时,你知道有些错误. (3认同)