如何避免代码中的 if 嵌套?

原帖子:http://top.jobbole.com/4960/


Stack Overflow上的一个挺有趣的问题,详细整理问题和部分巧妙的回答如下。

假设我刻意写了一段代码:

boolconditionA = executeStepA();
if(conditionA){
    boolconditionB = executeStepB();
    if(conditionB){
        boolconditionC = executeStepC();
        if(conditionC){
            ...
        }
    }
}
 
executeThisFunctionInAnyCase();

从代码可以看出,executeStepX 函数只有在前面的条件为真时才执行。executeThisFunctionInAnyCase 无论如何(异常除外)都会在最后执行。现在我有一个很基础的问题: 在C/C++当中,有没有什么方法可以避免这种冗长的 if 条件语句嵌套?

我知道如果不要求最后执行 executeThisFunctionInAnyCase 的话,代码可以重构成这样:

boolconditionA = executeStepA();
if(!conditionA) return;
boolconditionB = executeStepB();
if(!conditionB) return;
boolconditionC = executeStepC();
if(!conditionC) return;


但是,如果最后调用executeThisFunctionInAnyCase是必须的,我该如何重构if条件嵌套呢?

部分巧妙的回答请看评论。欢迎你也在评论中分享观点~



神解答:

  • 匿名人士 来自[上海市上海市] 2014-07-08 16:18:25
    8 楼
  • do{
        if(!executeStepA()) break;
        if(!executeStepB()) break;
        if(!executeStepC()) break;
    }while(0);
    executeThisFunctionInAnyCase();


  • 匿名人士 来自[火星] 2014-07-08 15:41:08
    7 楼

    使用 && 的话,其实 if 可以不用

    1
    2
    executeStepA() && executeStepB() && executeStepC();
    executeThisFunctionInAnyCase();

    • 匿名人士 来自[广西壮族自治区] 2014-07-09 09:13:45
      7-1 楼

      这种方式比较简洁。


解释:

&&相当一个开关语句,就是说如果&&前面值为false那么他就不继续执行后面的表达式;而&不管前面的值为什么,总是执行其后面的语句。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值