You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化嵌套if-else代码:波浪模式分析预测项目代码维护问题

嘿,我太懂你在这个波浪模式分析项目里被嵌套if-else搞得头大的感觉——这种深层嵌套的代码不仅读起来费劲,后期改bug、加新逻辑简直是噩梦。咱们来一步步把这段代码拆解开,让它变得清爽又好维护。

先把你给出的代码片段贴出来方便参考:

for (int x = 1; x <= 24; x++) { 
    if ((15 <= Angles[x]) && (Angles[x] <= 30)) { 
        if(x<=6) { 
            counter=counter+4; 
            if (edges[x] < edges[x+2]) { 
                counter = counter - 4; 
            } else{
                counter=counter+5; 
            }; 
            if (Angles[x] < Angles[x + 2]) { 
                counter = counter - 6; 
            } else{
                counter = counter + 4; 
            }; 
            // 后面的代码片段截断了,但核心问题是嵌套层级
        }
    }
}
重构方案:拆解嵌套,让代码模块化

1. 把条件判断抽成语义化的小函数

把那些复杂的条件(比如角度范围、x的区间判断)拆成单独函数,这样代码里的条件语句就一目了然,不用猜每个条件背后的业务含义:

// 判断角度是否在目标区间
bool isAngleInTargetRange(int angle) {
    return angle >= 15 && angle <= 30;
}

// 判断x是否处于早期窗口
bool isXInEarlyWindow(int x) {
    return x <= 6;
}

2. 用「提前返回/跳过」拉平嵌套层级

在循环里先判断不满足的条件,直接跳过当前迭代,这样就能把深层嵌套拆成平铺的逻辑,可读性瞬间提升:

for (int x = 1; x <= 24; x++) { 
    // 角度不符合要求?直接跳过
    if (!isAngleInTargetRange(Angles[x])) {
        continue;
    }
    // 不在x的早期窗口?跳过后续逻辑
    if (!isXInEarlyWindow(x)) {
        continue;
    }

    // 到这里都是满足条件的情况,不用再嵌套了
    counter += 4;
    
    if (edges[x] < edges[x+2]) {
        counter -= 4;
    } else {
        counter += 5;
    }
    
    if (Angles[x] < Angles[x + 2]) {
        counter -= 6;
    } else {
        counter += 4;
    }
}

3. 把counter的计算逻辑进一步封装

如果后面还有更多关于counter的调整逻辑,把这部分单独做成一个函数,循环里只需要调用它,代码会变得更简洁:

void updateCounterForWavePattern(int x, const int Angles[], const int edges[], int& counter) {
    counter += 4;
    
    if (edges[x] < edges[x+2]) {
        counter -= 4;
    } else {
        counter += 5;
    }
    
    if (Angles[x] < Angles[x + 2]) {
        counter -= 6;
    } else {
        counter += 4;
    }
    
    // 后面截断的逻辑也可以加在这里
}

// 循环里就变得非常清爽
for (int x = 1; x <= 24; x++) { 
    if (!isAngleInTargetRange(Angles[x]) || !isXInEarlyWindow(x)) {
        continue;
    }
    updateCounterForWavePattern(x, Angles, edges, counter);
}

4. 用常量提升业务可读性

如果那些数值(比如4、5、6这些counter调整值)有特定业务含义(比如对应「波峰基础增量」「波谷减量」),把它们定义成常量,代码的可读性会再上一个台阶:

const int BASE_WAVE_INCREMENT = 4;
const int EDGE_DROP_DECREMENT = 4;
const int EDGE_RISE_INCREMENT = 5;
const int ANGLE_DROP_DECREMENT = 6;
const int ANGLE_RISE_INCREMENT = 4;

void updateCounterForWavePattern(int x, const int Angles[], const int edges[], int& counter) {
    counter += BASE_WAVE_INCREMENT;
    
    if (edges[x] < edges[x+2]) {
        counter -= EDGE_DROP_DECREMENT;
    } else {
        counter += EDGE_RISE_INCREMENT;
    }
    
    if (Angles[x] < Angles[x + 2]) {
        counter -= ANGLE_DROP_DECREMENT;
    } else {
        counter += ANGLE_RISE_INCREMENT;
    }
}

这样调整后,代码的每一部分都有明确的语义,后期维护时不管是改条件还是调整数值,都能快速定位,再也不用被嵌套层级绕晕了。

内容的提问来源于stack exchange,提问作者chronus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:57:20