使用if-return-return或if-else-return会更有效率吗?

假设我有一个returnif语句。 从效率的angular度来看,我应该使用

 if(A > B): return A+1 return A-1 

要么

 if(A > B): return A+1 else: return A-1 

当使用编译语言(C)或脚本语言(Python)时,我应该更喜欢哪一种?

由于return语句终止了当前函数的执行,所以这两种forms是等价的(尽pipe第二种forms比第一种forms更具可读性)。

这两种forms的效率是可比的,如果if条件是错误的,底层的机器代码必须执行跳转。

请注意,Python支持的语法只允许您在您的案例中使用一个return语句:

 return A+1 if A > B else A-1 

从Chromium的风格指南:

退货后不要使用其他的东西:

 # Bad if (foo) return 1 else return 2 # Good if (foo) return 1 return 2 return 1 if foo else 2 

用任何合理的编译器,你都应该没有什么区别。 它们应该被编译成相同的机器码,因为它们是相同的。

关于编码风格:

大多数编码标准不pipe语言禁止单一函数的多重返回语句是不好的做法。

(虽然我个人认为有多种情况下多个返回语句是合理的:文本/数据协议parsing器,具有广泛的error handlingfunction等)

所有这些行业编码标准的共识是,expression应写成:

 int result; if(A > B) { result = A+1; } else { result = A-1; } return result; 

关于效率:

上面的例子和问题中的两个例子在效率方面完全相同。 所有这些情况下的机器代码必须比较A> B,然后分支到A + 1或A-1计算,然后将结果存储在CPU寄存器或堆栈中。

编辑:

资料来源:

  • MISRA-C:2004年第14.7条,其中又引用了……:
  • IEC 61508-3。 第3部分表B.9。
  • IEC 61508-7。 C.2.9。

版本A更简单,这就是为什么我会使用它。

如果你在Java中打开所有的编译器警告,你会在第二个版本上得到一个警告,因为这是没有必要的,并且会增加代码的复杂性。

我会一直使用:

 return A+1 if (A > B) else A-1 

因为它既遵循了作为函数中最后一个语句(如前所述)的单一return语句的良好惯例,也避免了避免命令式中间结果的良好函数式编程范例。 对于更复杂的函数,我将恢复使用称为rval的命令式样式variables。 我从不使用多个返回语句,宁愿将函数分解成多个子函数,以避免这种情况发生。 我根本不考虑效率问题,因为它对我来说很重要的编码效率(即写无错代码)。