V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guyeu
V2EX  ›  编程

关于一种条件语句的写法

  •  
  •   guyeu · 2019-08-21 14:35:55 +08:00 · 5076 次点击
    这是一个创建于 1922 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    当然,更多的情况是`a`和`b`都是极其普通的表达式,那就只是代码风格问题了。
    keith1126
        11
    keith1126  
       2019-08-21 19:58:36 +08:00
    至于最后一种,位运算设置标志位,感觉这种做法只是在 C 和 C++中比较多见...好处是省了空间,除此之外,我没觉得有啥优点。(此处不太了解,望指正
    guyeu
        12
    guyeu  
    OP
       2019-08-21 22:21:56 +08:00
    @keith1126 #11 如果分支情况有很多的话,标志位是比较有优势的。比如多个按钮的状态叠加。如果只是简单两三个条件的叠加,那都无所谓了。
    favourstreet
        13
    favourstreet  
       2019-08-21 23:18:48 +08:00 via Android
    觉得 if 套 if 难看就 if 套函数,函数里再套 if 呀
    murmur
        14
    murmur  
       2019-08-21 23:28:42 +08:00
    相信编译器和压缩工具,都 2019 年了,还有人认为代码长度反比与执行效率么
    guyeu
        15
    guyeu  
    OP
       2019-08-22 00:06:10 +08:00
    @murmur #14 是什么给了你错觉认为这个问题和执行效率有关?
    laike9m
        16
    laike9m  
       2019-08-22 01:12:34 +08:00 via Android
    @wu67 很多人都推荐这种风格
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.