为什么我们使用 if,否则 if 而不是多个 if block 如果 body 是一个 return 语句

2022-09-01 00:20:07

我总是习惯于使用 if,else-if 语句而不是多个 if 语句。

例:

int val = -1;
if (a == b1) {
   return c1;
} else if (a == b2) {
   return c2;
} ...
...
} else {
   return c11;
}

它与示例 2 相比如何:

if (a == b1) {
   return c1;
}
if (a == b2) {
   return c2;
}
....

if (a == b11) {
   return c11;
}

我知道功能方面它们是相同的。但是,如果其他事情是最佳做法,还是不这样做?当我指出他的一个朋友可以以不同的方式构建代码库以使其更干净时,我提出了这个问题。这对我来说已经是一个习惯很长一段时间了,但我从来没有问过为什么。


答案 1

if-elseif-else语句一旦找到一个真实的语句,就会停止进行比较。 做每一个比较。第一种是效率更高。if-if-if

编辑:评论中指出,您在每个块中都做了一个。在这些情况下,或者在控件将离开方法的情况下(异常),执行多个语句和执行语句之间没有区别。returnififif-elseif-else

但是,最佳做法是以任何方式使用。假设您更改了代码,以便您不会在每个块中都执行 a。然后,为了保持高效,你还必须改成一个成语。从一开始就让它保存了你将来的编辑,并且对于阅读你的代码的人来说更清楚(见证我刚刚通过浏览你的代码给你的误解!if-elseif-elsereturnifif-elseif-elseif-elseif-else


答案 2

哪里的情况呢?(如果和?b1 == b2a == b1a == b2

一般来说,发生这种情况时,以下两个代码块很可能具有不同的行为:

if (a == b1) {
   /* do stuff here, and break out of the test */
} 
else if (a == b2) {
   /* this block is never reached */
} 

和:

if (a == b1) {
   /* do stuff here */
}
if (a == b2) {
   /* do this stuff, as well */
}

如果要清楚地描述不同情况的功能,请使用或进行一个测试if-elseswitch-case

如果您希望为多个案例提供不同的功能,请使用多个块作为单独的测试if

这不是一个“最佳实践”的问题,而是定义你是有一个测试还是多个测试。


推荐