我一直习惯使用if,else-if语句而不是多个if语句.
例:
int val = -1;
if (a == b1) {
return c1;
} else if (a == b2) {
return c2;
} ...
...
} else {
return c11;
}
Run Code Online (Sandbox Code Playgroud)
它与例2相比如何:
if (a == b1) {
return c1;
}
if (a == b2) {
return c2;
}
....
if (a == b11) {
return c11;
}
Run Code Online (Sandbox Code Playgroud)
我知道功能明智,他们是一样的.但是,如果不这样做,最好的做法是 - 如果,不是吗?当我指出他可以用不同的方式构建代码库以使其更清晰时,它由我的一个朋友提出.这对我来说已经习惯了很长时间,但我从未问过为什么.
Can*_*ice 60
if-elseif-else一旦发现一个是真的,语句就会停止进行比较.if-if-if做每一次比较.第一个是更有效率.
编辑:在评论中已经指出你return在每个if区块内做了一个.在这些情况下,或者在控制将离开方法(例外)的情况下,执行多个if语句和执行if-elseif-else语句之间没有区别.
但是,if-elseif-else无论如何都要使用它.假设您更改了代码,使得您不会return在每个if块中执行此操作.然后,为了保持高效,你还必须改为if-elseif-else成语.拥有它if-elseif-else从一开始就可以保存您以后的编辑,并且对于阅读您的代码的人来说更清楚(见证我刚刚通过浏览代码给您的误解!).
Ale*_*lds 10
怎么样的情况b1 == b2呢?(如果a == b1和a == b2?)
当发生这种情况时,一般来说,以下两个代码块可能会有不同的行为:
if (a == b1) {
/* do stuff here, and break out of the test */
}
else if (a == b2) {
/* this block is never reached */
}
Run Code Online (Sandbox Code Playgroud)
和:
if (a == b1) {
/* do stuff here */
}
if (a == b2) {
/* do this stuff, as well */
}
Run Code Online (Sandbox Code Playgroud)
如果要清楚地描述不同情况的功能,请使用if-else或switch-case进行一次测试.
如果您希望针对多种情况使用不同的功能,请使用多个if块作为单独的测试.
这不是"最佳实践"的问题,而是定义您是否进行一次测试或多次测试.
它们在功能上并不相同.
它在功能上等价的唯一方法是,如果你为a的每个可能值做了一个"if"语句(即:每个可能的int值,如C中limits.h中定义的那样;使用INT_MIN和INT_MAX,或Java中的等价物).
else语句允许您覆盖每个可能的剩余值,而无需编写数百万个"if"语句.
此外,使用if ... else if else的更好的编码实践,就像在switch/case语句中一样,如果你没有提供"默认"case语句,你的编译器会给你一个警告.这可以防止您忽略程序中的无效值.例如:
double square_root(double x) {
if(x > 0.0f) {
return sqrt(x);
} else if(x == 0.0f) {
return x;
} else {
printf("INVALID VALUE: x must be greater than zero");
return 0.0f;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您是否要为x的每个可能值键入数百万个if语句?怀疑 :)
干杯!
| 归档时间: |
|
| 查看次数: |
49414 次 |
| 最近记录: |