如何优化价格计算逻辑中的这段if-else条件判断代码?
优化多分支if-else条件判断的简洁实现
问题描述
我编写了如下的if-else条件判断代码:
if (b != 0. && a != 0.) { price = (b + a) / 2; } else if (b == 0. && a != 0.) { price = a; } else if (a == 0 && b != 0.) { price = b; } else if (b == 0 && a == 0. && LastPrice != 0.) { price = LastPrice; } else { price = previous_close; }
这段代码的逻辑如下:
- 若b和a均不为0,则price = (b + a) / 2;
- 若b为0但a不为0,则取a的值,反之则取b的值;
- 若b和a均为0但LastPrice不为0,则取LastPrice的值;
- 其余情况则取previous close的值。
觉得当前写法较为繁琐,想找更简洁、编程风格更优的实现方式。
优化方案
方案1:分层判断+提前返回(可读性优先)
通过减少嵌套层级,按逻辑优先级依次判断,符合从上到下的思考顺序,后续修改维护也更方便:
double calculatePrice(double a, double b, double LastPrice, double previous_close) { // 优先处理a、b都非零的核心逻辑 if (a != 0. && b != 0.) { return (a + b) / 2; } // 单独非零的情况 if (a != 0.) { return a; } if (b != 0.) { return b; } // 处理LastPrice的情况 if (LastPrice != 0.) { return LastPrice; } // 兜底值 return previous_close; } // 调用示例 price = calculatePrice(a, b, LastPrice, previous_close);
这种写法把每个分支拆成独立判断,没有嵌套,逻辑清晰,适合大型项目复用。
方案2:链式三元表达式(紧凑优先)
如果追求代码简洁,且逻辑足够清晰,可以用链式三元表达式压缩成一行:
price = (a != 0. && b != 0.) ? (a + b)/2 : (a != 0.) ? a : (b != 0.) ? b : (LastPrice != 0.) ? LastPrice : previous_close;
注意:这种写法虽然紧凑,但如果后续逻辑扩展,可读性会下降,仅适合逻辑固定且简单的场景。
方案3:默认值逐步覆盖
先设置兜底值,再按优先级依次覆盖,也是一种简洁的写法:
price = previous_close; if (LastPrice != 0. && a == 0. && b == 0.) { price = LastPrice; } else if (a != 0. || b != 0.) { price = (a != 0. && b != 0.) ? (a + b)/2 : (a != 0. ? a : b); }
关键注意点
- 浮点数精度问题:直接用
a != 0.判断浮点数是否为0存在风险,建议用精度阈值,比如fabs(a) < 1e-9,避免因浮点数存储误差导致逻辑错误。 - 可读性优先:简洁不等于晦涩,优先选择团队成员能快速理解的写法,避免为了短代码牺牲可维护性。
内容的提问来源于stack exchange,提问作者w97802
相关产品推荐
相关产品推荐

