重复else if语句优化咨询:如何简化多分支条件代码
优化重复的else if条件判断代码
当然可以!这堆重复的else if完全可以用更简洁高效的方式替代——分支判断过多不仅代码冗余,还可能让CPU的分支预测失效(现代编译器虽有优化,但写法上能简化肯定更好)。
先分析你的代码规律
观察每个条件的计算逻辑:
- 当
d_hand[1] == 1:state = score(p_hand) - 1 - 当
d_hand[1] == 2:state = score(p_hand) + 19 - 当
d_hand[1] == 3:state = score(p_hand) + 39 - ...以此类推
你会发现,每个d_hand[1]对应的偏移量是有规律的:偏移量 = (d_hand[1] * 20) - 21。验证一下:
- 1*20-21 = -1 ✔️
- 2*20-21 = 19 ✔️
- 3*20-21 = 39 ✔️
- ...6*20-21=99 ✔️
方案1:用数学公式直接计算(最高效简洁)
直接用公式替代所有分支判断,代码瞬间清爽:
// 先做范围校验,确保d_hand[1]在1-6的预期范围内 if (d_hand[1] >= 1 && d_hand[1] <= 6) { state = score(p_hand) + (d_hand[1] * 20) - 21; } else { // 处理异常情况:比如保持state原值、抛出错误或设置默认值 // state = 你的默认值; }
如果能确保d_hand[1]永远是1-6,甚至可以省略范围判断,直接一行搞定:
state = score(p_hand) + (d_hand[1] * 20) - 21;
方案2:数组映射(适合规则可能变化的场景)
如果以后偏移量规则可能改成非线性的,用数组映射会更灵活,维护成本更低:
// 索引1-6对应d_hand[1]的取值,索引0留空不用 int offsets[] = {0, -1, 19, 39, 59, 79, 99}; if (d_hand[1] >= 1 && d_hand[1] <= 6) { state = score(p_hand) + offsets[d_hand[1]]; } else { // 处理异常情况 }
以后要修改某个值,只需要改数组里对应的元素即可,不用动逻辑代码。
为什么这两种方案更好?
- 效率更高:没有分支跳转,CPU不需要做分支预测,直接执行算术运算或数组取值,尤其在循环场景下优势更明显
- 可读性更强:一眼就能看懂state的计算逻辑,不用逐行看一堆
else if - 维护更方便:修改规则时只需要调整公式或数组,不用修改多个分支判断
内容的提问来源于stack exchange,提问作者mobupu
相关产品推荐
相关产品推荐

