神秘命名是什么
神秘命名(Mysterious Name)指名字看不出用途:函数、变量、类、模块的名字没有说明它做什么或是什么,读代码必须先跳到实现才能理解。命名卡壳往往意味着职责划分有问题——想不出准确的名字,通常是因为这段代码同时干了好几件事,应该先拆分再命名。
基本信息
| 识别信号 | 看不出用途,必须读实现才能明白 |
|---|---|
| 重构手法 | Rename Variable / Rename Function / Rename Class |
| 延伸判断 | 命名困难往往指向职责混杂 |
| 工具支持 | IDE 安全重命名,跨文件引用一次改全 |
典型使用场景
- 变量名用单字母或缩写:d、ttl、calcAmt 只能靠猜
- 函数名含糊:handle、process、doWork 说不出具体行为
- 名字与实现不符:叫 validate 的函数顺手写了库
- 类名过大:Manager、Helper、Util 通常意味着职责没拆开
- 布尔值用双重否定:notDisabled 容易在条件里读反
改名前后对照
改名前后对照
// 之前:名字说不出含义
int d; // 是过期天数还是距离?
void check(Order o) { ... } // 检查什么,返回什么?
// 之后:名字即文档
int daysUntilExpiration;
void rejectIfOrderExpired(Order order) { ... }
// 布尔值用肯定语义
boolean isActive; // 而不是 notInactive命名检查点
| 对象 | 要求 | 常见反例 |
|---|---|---|
| 变量 | 体现单位与含义 | d、tmp、data |
| 布尔值 | 肯定语义,避免双重否定 | notDisabled |
| 函数 | 动词开头,说明行为与副作用 | handle、process |
| 类与模块 | 名词,边界清晰 | Manager、Helper、Util |
改名是最安全的重构手段之一:IDE 能一次改全所有引用,评审也容易核对。
命名是一次性投入、长期收益的改动:只要不改行为,随时可以做,而且做得越早成本越低。
跨语言项目里同一个概念要保持同一套词汇:中英混杂的命名会让搜索和替换都变得不可靠。
卡在命名上时,先用一句话描述这个函数做什么;如果一句话说不完,问题在职责而不在名字。