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

如何在if-else分支中避免重复代码?遵循DRY原则的最佳方案

解决if-else链分支末尾重复代码的DRY方案

针对if-else链各分支末尾重复代码的问题,以下是符合DRY原则的实用解决方案,分C语言和其他编程语言场景说明:

C语言解决方案

1. 标记变量+封装重复代码为函数

这是最通用且易维护的方案,通过一个布尔标记记录是否有分支被触发,之后统一执行重复代码,避免了每个分支重复调用函数的问题:

#include <stdbool.h>

// 封装重复代码为独立函数
void wrapup_code() {
    // 这里放置所有分支需要重复执行的代码
}

int main() {
    bool condition_triggered = false;

    if (cond1) {
        // 分支1的业务代码
        condition_triggered = true;
    } else if (cond2) {
        // 分支2的业务代码
        condition_triggered = true;
    } else if (cond3) {
        // 分支3的业务代码
        condition_triggered = true;
    }

    // 仅当任一分支触发时执行收尾代码
    if (condition_triggered) {
        wrapup_code();
    }

    return 0;
}

2. 合理使用goto统一出口

在C语言中,goto并非洪水猛兽,用于实现统一的收尾出口是公认的合理用法,代码简洁且逻辑清晰:

int main() {
    if (cond1) {
        // 分支1的业务代码
        goto wrapup;
    } else if (cond2) {
        // 分支2的业务代码
        goto wrapup;
    } else if (cond3) {
        // 分支3的业务代码
        goto wrapup;
    }

    // 无分支触发时直接退出,跳过收尾
    return 0;

wrapup:
    // 这里放置重复执行的收尾代码
    return 0;
}

其他编程语言解决方案

Python

可以用标记变量配合封装函数,或者用函数封装分支逻辑返回状态:

def wrapup_code():
    # 重复执行的代码
    pass

# 方式1:标记变量
condition_met = False
if cond1:
    # 分支1代码
    condition_met = True
elif cond2:
    # 分支2代码
    condition_met = True
elif cond3:
    # 分支3代码
    condition_met = True

if condition_met:
    wrapup_code()

# 方式2:函数封装分支逻辑
def handle_branches():
    if cond1:
        # 分支1代码
        return True
    elif cond2:
        # 分支2代码
        return True
    elif cond3:
        # 分支3代码
        return True
    return False

if handle_branches():
    wrapup_code()

Java

核心思路仍是标记变量,若分支逻辑复杂可结合策略模式:

public class Main {
    public static void wrapupCode() {
        // 重复执行的代码
    }

    public static void main(String[] args) {
        boolean conditionMet = false;

        if (cond1) {
            // 分支1代码
            conditionMet = true;
        } else if (cond2) {
            // 分支2代码
            conditionMet = true;
        } else if (cond3) {
            // 分支3代码
            conditionMet = true;
        }

        if (conditionMet) {
            wrapupCode();
        }
    }
}

JavaScript

类似其他语言的标记变量方案,或利用立即执行函数简化逻辑:

function wrapupCode() {
    // 重复执行的代码
}

let conditionMet = false;
if (cond1) {
    // 分支1代码
    conditionMet = true;
} else if (cond2) {
    // 分支2代码
    conditionMet = true;
} else if (cond3) {
    // 分支3代码
    conditionMet = true;
}

if (conditionMet) {
    wrapupCode();
}

总结

最普适的方案是标记变量+封装重复代码为函数,既彻底遵循DRY原则,又保证代码可读性;C语言中合理使用goto能实现更简洁的统一出口;其他语言可根据自身语法特性选择更贴合的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:46:27