摘译自 (by Sagi Rabinovich@Medium)
代码是写给人看的,好的命名对提高代码的可读性至关重要。
命名是一门艺术,需要有良好的描述技巧,有些人天生具备这种能力,而大多数人需要为之奋斗。
使用有意义的名字
-
选择能够揭示意图的名字。例如,定义一个变量用来表示“上次更新的记录”,应当将它命名为
lastUpdatedRecord
,而不是record
或lastRecord
(某个文件中的最后一条记录??)。 -
做有意义的区分。不要通过故意的拼写错误、数字后缀或噪音词后缀来区分相似的名字。例如,
ProductData
vsProductInfo
,ProductInfo
包含了什么ProductData
不包含的信息吗?Data
和Info
就是噪音词,以它们为后缀来区分不同的名字是没有意义的。 -
增加有意义的上下文。变量
state
自身没有明确的意义,但是把它放到一个意义明确的类里面,别人很容易就能明白你的意图。例如address.state
或engine.state
,最不济但也正确的做法,是将上下文作为名字的前缀或后缀,例如
addressState
。调用链中的每一个部分都应当只增加新的上下文,这样可以缩短名字,同时保持其意义明确。
-
使用解决方案域中的名字。代码会被程序员阅读,所以可以并且应该使用计算机科学术语、模式名、算法名、数学术语等。
-
使用问题域中的名字。如果要表达的内容与问题域联系更为紧密,那么问题域中可能有合适的名字可用。使用问题域中的名字有助于更好的了解问题域,与客户拥有共同语言,并且可以解耦问题域的概念和特定解决方案。你可以使用
string address
定义一个来表达“送货地址”的变量,但是使用Address shippingAddress
更加明确和健壮。// instead ofString stateString streetAddressInt houseNumber// useAddress address复制代码
-
不要使用缩写。使用
getWindow
而不是getWin
。
概念
命名与概念的抽象和封装行为有关。
-
为每一个抽象概念挑选唯一的名字 并坚持使用它。让团队成员在表达同一个概念时使用相同的名字。
-
不要使用 双关语,不要为不同的事物使用相同的名字。例如,有两个类,一个类使用
add()
方法创建并添加用户,另一个类有一个方法用来往集合中插入一个参数,为每一个抽象概念挑选一个名字
这一原则可能会误导你为两个方法取同样的名字add()
,事实上两个方法有不同的语义。 -
避免意象映射(mental mapping)。这一点非常重要。不要让读者将名字理解为他们知道的其他东西。甚至应该为循环计数器命名,使其更容易理解。不要做一个炫耀智力的聪明程序员,要做一个清晰为王的专业程序员。
-
为通用操作约定统一的名字。例如,如何获取对象的 Id ?
worker.getId()candidate.id()employee.id.get()supervisor()复制代码
-
使用精确的对立词。如果你可以
open()
,你应该也可以close()
,如果你可以start()
,你应该也可以stop()
。
噪音和样板
命名应该尽可能的干净和短小。噪音让读者阅读更多的内容却没有产生任何好处,而是带来困惑。
-
不要制造噪音。你的
ProductInfo
什么意思?它与ProductData
有何不同?类似这样的后缀就是噪音。 -
避免注释。好的命名远胜于注释。
-
当心
I
开头的命名(接口陷阱)。不要通过给具体类添加一个前缀I
的方式来获得一个接口类。IDollar
不是一个比Currency
好的名字。Carlo Pescio 在其博文 中详细阐述了这一观点。 -
不要增加不必要的上下文。例如,不要把项目名的缩写作为前缀,这会影响 IDE 的自动补全功能,并且难以在其他项目中复用。
虚假信息
-
避免使用与要表达的含义之外的含义过于相关的词和缩写词。
避免在名字中使用数据类型,例如
accountList
,或许有一天有人会将数据结构改为使用hashSet
,这个名字将失去意义,如果使用accounts
就不会有这个问题。 -
避免在长名字中间插入有细微的差别的词。例如,使用
o
或l
,它们与0
和1
太过相似。 -
避免注释。经常会出现代码变了,注释却没有更新的情况。
人类读者
-
名字要有 必要的长度 以表达精确的含义,但是应当 尽可能短 以增加可读性。
-
可读性胜过简洁性。
CanScrollHorizontally
比ScrollableX
好。 -
使代码像 段落和句子 一样可读,并尽可能正确地使用语法。
-
使用 读得出来的名字,必须你能在听起来不像白痴的情况下讨论它。例如,如果变量名为
plhmbuster
,你如何与别人讨论它。 -
不要可爱或聪明。对于一个有趣的名字,只有当知情人还在项目团队中的时候,它才是可理解的。
-
使用可搜索的名字 以便 IDE 能够帮到你。例如,用常量表示魔数。
-
避免发音相似的名字。
-
避免容易拼错的名字。