条件判断最佳实践:输入验证场景下哪种写法更具可读性?
条件判断写法选择指南
这问题问得太接地气了!咱们结合不同场景来聊清楚该选哪种写法:
一、常规条件判断的最佳实践
优先选择正向判断的写法:
if (a) { // 主逻辑代码 } else { // 分支逻辑代码 }
而非反向判断的版本:
if (!a) { // 分支逻辑代码 } else { // 主逻辑代码 }
原因很简单:人的思维习惯是先关注「正常/预期的情况」,再处理例外分支。反向判断会让读者一开始就要绕个弯理解否定逻辑,平白增加了理解成本。
二、输入验证场景:选平铺式提前退出(示例二)
在输入验证这类需要多条件校验的场景里,示例二的平铺式提前退出写法完胜示例一的嵌套写法。
先看可读性拉胯的嵌套写法(示例一):
if (something) { if (somethingElse) { doSomething } else { // error message: somethingElse is wrong (different message) exit } } else { // error message: something is wrong exit }
这种嵌套会产生「箭头代码」——层级越深,代码越靠右,读者需要层层缩进追踪逻辑,很容易看晕头。
而示例二的提前退出写法:
if (!something) { // error message: something is wrong exit } if (!somethingElse) { // error message: somethingElse is wrong (different message) exit } doSomething exit
它的优势太明显了:
- 代码扁平无嵌套,逻辑一目了然,不用来回追踪缩进
- 错误处理全部放在开头,一眼就能扫完所有校验规则
- 核心业务逻辑
doSomething放在最后,完全不受校验代码干扰 - 后续新增校验条件,直接在开头加新的
if (!xxx)判断就行,维护成本极低
总结
- 常规分支逻辑:用正向判断的
if (a) { ... } else { ... },贴合日常思维习惯 - 输入验证/多条件校验:必须选示例二的平铺式提前退出写法,这是业内公认的提升代码可读性和可维护性的最佳实践
内容的提问来源于stack exchange,提问作者Rendolf Trust
相关产品推荐
相关产品推荐

