在写代码时经常有通过多个条件进行分支判断的情况,一般而言 n 个 bool 值的组合会有 2²种情况,以下是一个两个条件的例子:
boolean a;
boolean b;
if (a) {
if (b) {
} else {
}
} else {
if (b) {
} else {
}
}
有些人会更喜欢写成这样:
boolean a;
boolean b;
if (a && b) {
} else if (a && !b) {
} else if (!a && b) {
} else {
}
也有人会更习惯用位操作来实现标志位来进行这种分支的演算,想问下大佬们一般遇到这种怎么写?
1
momocraft 2019-08-21 14:38:27 +08:00 1
后一种可以让多个组合(如: a^b )用同一个 block
|
4
Building 2019-08-21 14:53:04 +08:00 via iPhone
这个得看具体语义和场景吧,第二种以后要是再多个 c...
|
5
lukaz 2019-08-21 14:53:50 +08:00
分支怎么少怎么来
|
6
wu67 2019-08-21 15:03:40 +08:00 2
就我个人而言, 我喜欢搭配 return 然后尽量消灭 else, 就是一路 if 下来那种
|
7
zwzmzd 2019-08-21 18:42:09 +08:00 via Android
条件多的时候应该做一张真值表,少的话随便了
|
8
Akiyu 2019-08-21 18:47:07 +08:00
感觉第一种判断语句的粒度更小, 更容易理解和维护
|
9
DOLLOR 2019-08-21 19:02:57 +08:00 via Android
第一种更容易扩展。比如后期想要在 if b 之前增加一些代码
|
10
keith1126 2019-08-21 19:56:09 +08:00
从程序语义上来看,如果`a`和`b`不都是纯表达式(即有副作用,如`stack.pop()`),那么两者是不等价的;
即便`a`和`b`都是纯表达式,如果这个表达式计算代价太大,那么第二种写法导致的重复计算会降低效率; 当然,更多的情况是`a`和`b`都是极其普通的表达式,那就只是代码风格问题了。 |
11
keith1126 2019-08-21 19:58:36 +08:00
至于最后一种,位运算设置标志位,感觉这种做法只是在 C 和 C++中比较多见...好处是省了空间,除此之外,我没觉得有啥优点。(此处不太了解,望指正
|
12
guyeu OP @keith1126 #11 如果分支情况有很多的话,标志位是比较有优势的。比如多个按钮的状态叠加。如果只是简单两三个条件的叠加,那都无所谓了。
|
13
favourstreet 2019-08-21 23:18:48 +08:00 via Android
觉得 if 套 if 难看就 if 套函数,函数里再套 if 呀
|
14
murmur 2019-08-21 23:28:42 +08:00
相信编译器和压缩工具,都 2019 年了,还有人认为代码长度反比与执行效率么
|