命名的重要性
Your code is for a human first and a computer second. Humans need good names.
— Martin Fowler, Refactoring:Improving the Design of Existing Code
- 好的命名使代码更容易理解
- 理解力
- 帮助记忆。记住代码逻辑、结构和作用。
- 提高工作效率
- 提升查找效率
- 减少阅读理解代码成本
- 减少修BUG时间
- 减少开发时间
- 减少沟通成本
- 助力职业发展
- 好的命名需要对相关概念和知识有清楚的理解和认识。
命名的难点
There are only two hard things in Computer Science: cache invalidationand naming things.
— Phil Karlton
- 缺乏相关标准或工具
- 无法精准评价命名的好坏
- 需求可能迭代变化
- 某些情况下好的命名可能由于功能迭代变成坏的命名
- 收益不明显
- 想出一个更好的命名可能需要花更多的时间。
命名原则
- Understandability
-
What is above all needed is to let the meaning choose the word, and not the other way around. In prose,the worst thing you can do with words is to surrender to them.
— George Orwell
- 表示正确的概念
- 用字典里有的单词
- people_group(bad) vs organization(good)
- 正确的复数
- 正确的词性
- 避免误导
- lua的table和list
- 使用正确的专业术语
- 包含量纲的单位
- 避免不通用的缩写
-
- Conciseness
-
The more you say,the less people remember.
— Francois Fenelon
- 抽象层级要合适
- 省略元数据
- 类型,作用范围
- 动态类型语言不推荐省略
- 省略实现细节
-
- Consistency
-
It is better to have a system...reflect one set of design ideas than to haveone that contains many good but independent and uncoordinated ideas.
— Fred Brooks, The Mythical Man-Month
- 每个概念只能有一个名字
- 避免描述一个概念使用多个不同的同义词
- 术语要正确
- 相似的概念有相似的名字
- 相似的名字有相似的格式
- 遵守一套编程规范
- 使用正确的反义词
-
- Distinguishablity
- 避免多义词
- 避免同音词
- Tradeoff
- 优先保证Consistency
- 不一致往往其它原则也不会满足
- Understandability vs Conciseness
- 取决于上下文
- 借助Distinguishablity来判断
- Understandability vs Distinguishability
- 同义词很容易触发问题
- Conciseness vs. Distinguishability
- 优先Distinguishability
- 优先保证Consistency