有意义的命名
PPG007 ... 2021-12-26 About 3 min
# 有意义的命名
# 名副其实
- 名字应当能够回答大部分问题,包括:它为什么存在、做什么事、应该怎么用,名称不应当再需要注释来补充解释,如果一旦发现更合适的名称就替换掉。
# 避免误导
- 程序员必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词。例如不应当使用一些系统中的专有名词,除非真的是List否则不要将变量取名xxxList。
- 新起名字不要和原有的名字太过相似,不容易区分。
- 相似的名称按字母顺序放在一起就会很明显。
- 注意大写字母O和小写字母l与数字0、1的区别,不要随意使用。
# 做有意义的区分
- 同一作用域中,名称需要区分时应当使用有意义的命名区分,不能简单地添加数字后缀。
- 杜绝没有意义的区分,例如一个类叫ProductInfo,另一个叫ProductData,没有本质上的意义区别。
# 使用读得出来的名称
- 不应当随意将单词缩写然后拼接在一起,常识性缩写除外,无法所写的应当全部拼写。
# 使用可搜索的名称
- 不使用单字母和数字,容易漏掉。
# 避免使用编码
- 不要再使用无意义的前缀和后缀,哪怕它们曾经是主流。
# 避免思维映射
- 起名字不应当让他人阅读时翻译成他们熟悉的名字,明确是王道。
# 类名
- 类名和对象名应该是名词或名词短语,不应当是动词。
# 方法名
- 方法名应当是动词或动词短语,getter、setter应当按照Java Bean标准命名。
- 重载构造器时,使用描述了参数的静态工厂方法名,通常比直接调用构造器要好,所以可以将构造器设为私有,强制使用这种方法。
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
Complex fulcrumPoint = new Complex(23.0);
1
2
2
# 名字不要开玩笑
- 不要使用俗语、俚语。
- 言到意到,意到言到。
# 每个概念对应一个词
- 给每个抽象概念选一个词并且一以贯之,一致性越强可维护性越高。
# 别用双关语
- 一个单词应当只应用在一个概念中,一词一意,例如加法和连接方法名都有add,那么增加操作就应当命名为insert或append而不应当继续使用add。
# 使用解决方案领域名称
- 尽管使用计算机科学中的术语、算法名、模式名等。
# 使用源自所涉问题领域的名称
- 如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称。
# 添加有意义的语境
- 很少有变量可以通过名称自我说明,存在多个变量时,为它们创建一个单独的类更加合适。
# 不要添加没用的语境
- 只要短名称足够清楚,就要比长名称好。别给名称添加不必要的语境。