嵌套if语句与else if链式写法的优劣对比及规范选择问询
else if链式与嵌套if的优缺点对比
else if链式(第一种写法)
优点
- 代码层级扁平无多层缩进,短条件下可读性更高,不需要逐层匹配嵌套的闭合括号
- 所有分支的触发条件都平铺在最外层,互斥关系一目了然,调整单个分支条件时不需要改动其他代码的缩进结构
缺点
- 存在重复判断逻辑:示例中
val > 0被执行了两次,虽然现代编译器大多会做常量优化,但如果判断对象是带副作用的函数调用(比如每次调用返回值可能变化的动态计算属性),会直接导致逻辑异常;如果判断逻辑本身计算成本高,也会产生不必要的性能损耗 - 公共条件关联不直观:无法直接看出前两个分支共享
val > 0的前置条件,分支数量多了之后很容易漏看条件的公共部分,新增分支时容易写错判断逻辑
嵌套if(第二种写法)
优点
- 公共前置条件仅需判断一次,不会出现重复判断的问题,无论是逻辑稳定性还是性能表现都更优,尤其适合前置判断逻辑复杂、或判断对象带副作用的场景
- 条件的层级关系清晰,同属一个前置条件的子分支分组明确,新增同组子分支时不需要重复编写公共条件,出错概率更低
缺点
- 嵌套层数过多时会形成「箭头型代码」,多层缩进会大幅降低可读性,尤其是单分支代码量较大的场景下,匹配if-else的对应关系成本很高
- 如果内层分支需要提前返回,嵌套写法会产生更多冗余缩进,代码整洁度会下降
通用开发规范
- 优先按条件的关联关系选择写法:如果多个分支存在明确的公共前置判断条件,优先用嵌套写法把公共条件提至外层;如果所有分支都是完全互斥的平级判断,优先用else if链式写法
- 嵌套层级严格控制在3层以内,超过层级要么改用卫语句提前return退出分支,要么把内层逻辑抽为独立函数,复杂度更高的场景可以用策略模式替换分支判断
- 如果判断逻辑包含带副作用的函数调用,禁止用链式写法重复执行判断,要么先把判断结果存入临时变量再做分支判断,要么用嵌套写法仅执行一次判断
- 链式写法的单条判断条件尽量不要包含多个
&&/||组合的复杂逻辑,要么拆为嵌套结构,要么先把复杂判断的结果存入语义明确的布尔变量后再使用
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

