应使用语义清晰的布尔变量或谓词封装条件,如 is_blank.test(input),避免在 if 中直接写 age >= 18 && age
写出高可读性的逻辑判断,核心不是堆砌运算符,而是让别人(包括未来的你)一眼看懂“在什么条件下做哪件事”。Java 的 &&、||、! 本身很简单,真正影响可读性的是表达方式、命名和结构。
用语义清晰的布尔变量封装条件
避免在 if 中直接写一长串比较和逻辑组合。把每个独立含义的条件提取成有名字的布尔变量,再组合。
- 差:if (age >= 18 && age
- 好:
boolean isOfWorkingAge = age >= 18 && age boolean isEligibleToDrive = !isSuspended && hasValidLicense;<br>if (isOfWorkingAge && isEligibleToDrive)变量名自带上下文,后续维护或扩展时,只需关注单个变量的定义,不用反复解析整条表达式。
优先使用 && 和 || 的自然语序,少嵌套否定
人脑对“正向条件”更敏感。用 ! 包裹复杂表达式容易增加理解负担。
Java Development Manual下载Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 难读:if (!(user == null || user.getRole() == null || !user.getRole().isActive()))
- 更清晰:if (user != null && user.getRole() != null && user.getRole().isActive())
- 如果必须否定,尽量只否一个简单项:if (!isBlocked && isVerified)
合理使用括号明确意图,不依赖优先级记忆
虽然 && 优先级高于 ||,但靠记规则写代码容易出错,也妨碍快速阅读。
- 模糊:if (a || b && c) —— 是 a || (b && c),还是 (a || b) && c?得想一下
- 明确:if (a || (b && c)) 或 if ((a || b) && c),取决于真实业务逻辑
- 哪怕多打几个括号,也比让人猜强
三元运算符只用于纯值选择,不掺杂流程控制
三元 ? : 是表达式,不是语句。它适合返回值,不适合执行动作。
- 安全:String status = isActive ? "在线" : "离线";
- 危险(可读性崩坏):
String msg = isValid ? logSuccess() : logError();—— logSuccess() 返回 String 吗?副作用在哪?调用顺序是否关键?- 只要分支里出现方法调用、IO、修改状态等操作,一律改用 if-else
空值与边界检查统一前置,避免重复分散
常见模式如
str == null || str.isEmpty(),建议封装为工具方法或静态常量,而不是每次手写。
- 例如定义:public static final Predicate
IS_BLANK = s -> s == null || s.trim().isEmpty(); - 使用:if (IS_BLANK.test(input)) { ... }
- 既减少重复,又让意图一目了然——是检查“空白”,不是“null 或空字符串”的技术实现
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南












