else语句是否会降低编译时间/运行速度?(在可以避免的情况下)

Jor*_*dan 5 java optimization coding-style

在无数(好的,可数的,但很多)场合,特别是在类的方法/函数中,我一直处于我想在void-return函数中执行一组操作的情况,但仅限于此if(condition met).在大多数情况下,我可以看到(假设代码工作)如何else通过简单地在if块中返回来完全删除语句.

这是一个具体的例子,如果没有意义:

用else语句(教师如何展示)

    private void ifThisDoThat(params){
        if(dependenciesNotMet) return;
        else{
            ////DO STUFF HERE...
        }
    }
Run Code Online (Sandbox Code Playgroud)

没有(更简约)

    private void ifThisDoThat(params){
        if(dependenciesNotMet) return;
        //Assuming the above does not execute, DO STUFF HERE...
    }
Run Code Online (Sandbox Code Playgroud)

我认为删除else声明,如果完全优化,将被归类为微优化,但仍然认为我会要求我自己的启发.

结束时:

使用a return删除else块有什么好处吗?

如果我使用else语句,编译器是否会做额外的工作?

是否有理由始终使用else(出现错误或其他原因)?

Hot*_*cks 5

这是错误的优化.编译器实际上可能需要更长的时间来编译,从中间返回,并且任何优化编译器将为两个表单生成基本相同的可执行代码.

在风格方面,有时一种风格是好的,有时是另一种风格.返回立即风格的危险是:

  1. 如果方法底部有任何常见的完成/清理逻辑,则会遗漏.人们很容易忘记,在一个大的方法,该逻辑是存在的,而且这也很容易,在一个大的方法,编写这样的逻辑成以前没有它的方法.这种错误很难找到.
  2. 因为它基本上消除了在方法底部使用"清理"逻辑的选项,它可能导致单个if支路中逻辑的激增,比标准if/then/else产生更多的混乱.
  3. 它与良好的"结构化编程"实践背道而驰.

也就是说,有些情况下,从中间返回的风格是更好的选择:

  1. 有多个连续if语句的情况,每个语句都有一个简单的主体,每个都能以return结尾.
  2. 这是一个非常简短的方法,其中"快速退出"是自然而且相当明显的.
  3. "快速退出"(例如,因为某些数据项为零)的情况非常接近较长方法的顶部.

  • 我要补充的是,有很多东西可以提高可读性,而无需实际更改if/then/else逻辑.我更倾向于在`if`行而不是下一行看到`{`,匹配的`}`与`if`对齐.如果有一个'else`我更喜欢在其自己的行上看到`else {`,而不是`} else {`.可以添加或删除空行以提高易读性 - 这是一种艺术.避免排长队(使用Objective-C很困难,例如,对Java来说不是很多).在小方法中使用短变量名称,在较大方法中使用较长的变量名称和更多局部变量.等等. (2认同)