有意义的命名

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

# 名字不要开玩笑

  • 不要使用俗语、俚语。
  • 言到意到,意到言到

# 每个概念对应一个词

  • 给每个抽象概念选一个词并且一以贯之,一致性越强可维护性越高。

# 别用双关语

  • 一个单词应当只应用在一个概念中,一词一意,例如加法和连接方法名都有add,那么增加操作就应当命名为insert或append而不应当继续使用add。

# 使用解决方案领域名称

  • 尽管使用计算机科学中的术语、算法名、模式名等。

# 使用源自所涉问题领域的名称

  • 如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称。

# 添加有意义的语境

  • 很少有变量可以通过名称自我说明,存在多个变量时,为它们创建一个单独的类更加合适。

# 不要添加没用的语境

  • 只要短名称足够清楚,就要比长名称好。别给名称添加不必要的语境。
Last update: December 26, 2021 13:38
Contributors: PPG007