
在写代码时经常有通过多个条件进行分支判断的情况,一般而言 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 后一种可以让多个组合(如: 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 就我个人而言, 我喜欢搭配 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 AV1 2019-08-21 19:02:57 +08:00 via Android 第一种更容易扩展。比如后期想要在 if b 之前增加一些代码 |
10 zackwu 2019-08-21 19:56:09 +08:00 从程序语义上来看,如果`a`和`b`不都是纯表达式(即有副作用,如`stack.pop()`),那么两者是不等价的; 即便`a`和`b`都是纯表达式,如果这个表达式计算代价太大,那么第二种写法导致的重复计算会降低效率; 当然,更多的情况是`a`和`b`都是极其普通的表达式,那就只是代码风格问题了。 |
11 zackwu 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 年了,还有人认为代码长度反比与执行效率么 |