如何重构嵌套for循环以合并相似函数减少重复代码
合并重复逻辑的实现方案
方案1:布尔参数控制(最简实现,适配C/C++全版本)
提取公共的嵌套循环逻辑,通过布尔参数控制是否执行func_2调用,可保留原有funcA、funcB对外接口,完全不影响现有代码的调用逻辑。
// 提取的公共逻辑函数 void common_func(bool need_call_func2) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { func_1(); if (need_call_func2) { func_2(); } } } } // 原有对外接口保持不变 void funcA() { common_func(false); } void funcB() { common_func(true); }
该方案改造成本极低,无额外性能开销,适合差异逻辑固定、不需要后续扩展的场景。
提示:如果
size不是全局变量,可将其作为参数传入公共函数,适配更多调用场景。
方案2:回调函数实现(扩展性更强,适合可变差异逻辑场景)
如果后续可能新增更多循环内的自定义逻辑,可以使用回调函数实现扩展,以下为C++示例:
#include <functional> void common_func(std::function<void()> extra_action = nullptr) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { func_1(); if (extra_action) { extra_action(); } } } } void funcA() { common_func(); } void funcB() { common_func(func_2); }
该方案符合开闭原则,后续新增差异逻辑时不需要修改公共函数的内部代码,直接传入对应回调即可。
内容的提问来源于stack exchange,提问作者KeKe
相关产品推荐
相关产品推荐

