同类型多条件重复赋值的性能问题:哪种实现方案更可取?
重复条件判断 vs 单一if-else:哪种方案更可取?
先看两种写法的对比:
原代码(重复判断):
else if (condition1){ a = condition2 ? m : 0; b = condition2 ? 0 : m; c = condition2 ? n : 0; d = condition2 ? 0 : n; }
改写后的单一if-else:
else if (condition1){ if (condition2) { a = m; b = 0; c = n; d = 0; } else { a = 0; b = m; c = 0; d = n; } }
从三个核心维度分析:
性能差异几乎可以忽略:现代编译器都有公共子表达式消除优化,只要
condition2是纯无副作用的判断(比如i==j这种),重复的四次判断会被自动合并成一次执行,两种写法的运行效率没区别。但如果condition2是带副作用的表达式(比如调用了会修改全局变量、发起IO的函数),那重复判断会导致多次执行副作用,这时候必须用单一if-else。维护性单一if-else完胜:原写法把同一个判断分散在四行里,后续如果要修改
condition2的逻辑(比如改成i>=j),很容易漏改其中某一行,引发bug。而单一if-else把所有依赖该条件的赋值逻辑集中在一起,只需要修改一次判断条件,逻辑清晰不易出错。可读性单一if-else更直观:原写法每行看似简洁,但需要读者自行关联四行的条件是同一个;单一if-else则直接把“当condition2成立时做什么,不成立时做什么”的逻辑块展示出来,一眼就能看懂整体分支的操作,更符合人类的阅读习惯。
结论
优先选择单一if-else方案。除非是极简单且确定永远不会变更的判断场景,否则维护性和逻辑集中的优势远大于原写法的“简洁感”。
内容的提问来源于stack exchange,提问作者SKPS
相关产品推荐
相关产品推荐

