如何遵循DRY原则改写代码避免重复?附现有实现及疑问
遵循DRY原则的代码重构
首先,我们可以提取两段代码中重复的逻辑,通过引入步长变量和布尔标记来消除重复:
if (c != n) { // 确定c的调整方向:1表示递增,-1表示递减 int step = (c < n) ? 1 : -1; // 标记是否需要在循环后反转p的值 bool need_invert = (c > n); // 统一的循环逻辑 while (c != n) { p *= b; c += step; } // 根据标记决定是否反转p if (need_invert) { p = 1.0 / p; } }
重构说明:
- 用
step变量替代了原代码中c++和c--的差异,通过一次判断确定调整方向,避免了重复的循环结构。 - 用
need_invert布尔变量记录是否需要对p取倒数,将原代码中仅在c>n时执行的逻辑统一到循环之后处理。 - 完全保留原代码的所有行为:包括修改
c使其最终等于n,以及对p的计算逻辑完全一致。
这种重构方式严格遵循DRY原则,将重复的循环代码合并为单一实现,同时通过变量封装了不同分支的差异点,代码更简洁且易于维护。
内容的提问来源于stack exchange,提问作者XMS
相关产品推荐
相关产品推荐

