有什么好的办法处理流程控制的程序块

最近遇到了一个问题,当写if条件时通常2个程序块需要处理不同的程序,但由于当流程控制过多的时候需不太好处理了,请问大家是如何处理的(前提条件是 面向过程编写,不能定义函数)
例子:

if(a)
{
    if(b)
    {
        if(c)
        {

        }else{
            // d
        }
    }else{
        // d
    }
}else{
    // d
}

以上是一个简单的例子 ,可以看到写d写了多次

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 9
 if(a && b && c){

 } else {
     // d
 }

这样子?

1周前 评论

abc的每个程序块都是独立的,如果是这样的话当a 条件满足, b条件不满足, c条件满足这样就没法处理了

1周前 评论
早起的虫子
 if(a){
        if(b){
             if(c){
               return ;
              }
           return ;
         }
         return ;
    }
     // d
    return ;
1周前 评论
if(!a) goto d;
if(a && !b) goto d;
if(a && b && !c) goto d;
if(a && b && c) goto e;

d:XXX;
e:XXXX;
1周前 评论
1 largezhou: 卧槽!!!惊现 goto 1周前
Caral: @largezhou 然而我自己也从来没用过goto~~~ 1周前
ab0029: goto还是少用为妙 1周前
ajax_com: 想过用goto 但是考虑到代码目前的项目是用单文件做接口, 几万行代码容易出问题 1周前
largezhou: @Caral 曾经在文曲星上写 gvbasic 就疯狂 goto,,,其他时候从没写过,,,哈哈哈 1周前
半人间: 写个函数D 1周前
panda-sir: 打死不用goto :joy: 1周前
Epona

提前 return 和 @早起的虫子 做法类似吧

1周前 评论
if (a) {
    # code...
}

if (a && b ) {
    # code...
}

if (a && b && c) {
    # code...
}

if (....) {
    # code...
}

我个人比较喜欢这样子写
相对来说 思路比较清晰点...

1周前 评论
sanders

基本上优化“锯齿形代码”的方式就是用函数封装,既然不能用函数封装,不知道你这里使用闭包算不算另一种作弊的方案?

1周前 评论
  1. 将条件反转, 异常情况先退出, 正常情况维持主干
  2. 将if else内的代码封装成公共函数
  3. 合并相同的条件表达式
1周前 评论
if (! a) {
    return;
}

if (! b) {
    return;
}

if (! c) {
    return;
}

// ...
1周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会