关于一种条件语句的写法

2019-08-21 14:35:55 +08:00
 guyeu

在写代码时经常有通过多个条件进行分支判断的情况,一般而言 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 {
}

也有人会更习惯用位操作来实现标志位来进行这种分支的演算,想问下大佬们一般遇到这种怎么写?

5096 次点击
所在节点    编程
16 条回复
momocraft
2019-08-21 14:38:27 +08:00
后一种可以让多个组合(如: a^b )用同一个 block
guyeu
2019-08-21 14:45:08 +08:00
@momocraft #1 这其实和`((a && b) || (!a && !b))`没有实质差别,并且增加了理解难度
momocraft
2019-08-21 14:50:22 +08:00
@guyeu 没关系,你不需要和我一起写代码
Building
2019-08-21 14:53:04 +08:00
这个得看具体语义和场景吧,第二种以后要是再多个 c...
lukaz
2019-08-21 14:53:50 +08:00
分支怎么少怎么来
wu67
2019-08-21 15:03:40 +08:00
就我个人而言, 我喜欢搭配 return 然后尽量消灭 else, 就是一路 if 下来那种
zwzmzd
2019-08-21 18:42:09 +08:00
条件多的时候应该做一张真值表,少的话随便了
Akiyu
2019-08-21 18:47:07 +08:00
感觉第一种判断语句的粒度更小, 更容易理解和维护
DOLLOR
2019-08-21 19:02:57 +08:00
第一种更容易扩展。比如后期想要在 if b 之前增加一些代码
keith1126
2019-08-21 19:56:09 +08:00
从程序语义上来看,如果`a`和`b`不都是纯表达式(即有副作用,如`stack.pop()`),那么两者是不等价的;

即便`a`和`b`都是纯表达式,如果这个表达式计算代价太大,那么第二种写法导致的重复计算会降低效率;

当然,更多的情况是`a`和`b`都是极其普通的表达式,那就只是代码风格问题了。
keith1126
2019-08-21 19:58:36 +08:00
至于最后一种,位运算设置标志位,感觉这种做法只是在 C 和 C++中比较多见...好处是省了空间,除此之外,我没觉得有啥优点。(此处不太了解,望指正
guyeu
2019-08-21 22:21:56 +08:00
@keith1126 #11 如果分支情况有很多的话,标志位是比较有优势的。比如多个按钮的状态叠加。如果只是简单两三个条件的叠加,那都无所谓了。
favourstreet
2019-08-21 23:18:48 +08:00
觉得 if 套 if 难看就 if 套函数,函数里再套 if 呀
murmur
2019-08-21 23:28:42 +08:00
相信编译器和压缩工具,都 2019 年了,还有人认为代码长度反比与执行效率么
guyeu
2019-08-22 00:06:10 +08:00
@murmur #14 是什么给了你错觉认为这个问题和执行效率有关?
laike9m
2019-08-22 01:12:34 +08:00
@wu67 很多人都推荐这种风格

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593842

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX