不少小伙伴在起变量名的时遇到过困难,在此,分享一些我的经验和建议:
一、多读代码
你可以回忆一下,你现在常用的那几个变量名称,它们中是不是有很大一部分最早是出现在别人的代码里?
必须承认,你所写的代码很多时候并不那么特殊。可能已经有无数前人遇到过相同需求,编写过相似代码,你可以从中得到启发,为你未来构写代码、命名变量的时候提供灵感。
二、多读书籍
编程是一种语言,语言都是后天习得的。作为编程语言能力的一部分,变量命名也可以通过学习习得。除了上述向别人的代码学习外,还有一个选项就是看英文书籍。
至于挑选书目,我建议要有针对性,可以选择一些和你当前业务场景相关的书。通过这些书,你可以在深入了解整个业务逻辑,同时还能在不经意间获得与业务相关的英语词汇,这对你变量起名帮助很大。
三、命名技巧
1. 关于变量、类名
- 变量名一般使用英语,不要用动词,变量名通常建议使用名词,选择的名词需要直接指向该变量的意涵;
- 可以在名词前面添加修饰词来区分相似变量,修饰词可以是形容词,如
sortKey
中的sort
,也可以是指向更细节的名词,如DataFrame
中的Data
; - 如果该变量是基础数据类型,则通常使用名词的单数型式,如果该变量是诸如
Array
、List
、Set
这样的数据集合,则通常使用名词的复数形式作为变量名; - 类名的命名技巧和变量基本一致,不过类名一般不使用复数;
2. 关于函数名和方法名
函数名和方法名的命名逻辑就比较多样了,这里的技巧分享仅作为抛砖引玉,欢迎补充:
- 方法命名的核心是动词:很多方法用纯动词来表达,如:
concat
、match
等; - 有些方法名会使用动宾词组:即“动词+作用对象名词”的型式,值得一提的是,这里的名词在逻辑上也往往可可以方法后面的参数中,如:
hasNext
、trimEnd
,这里的Next
和End
逻辑上也可以是has
和trim
的参数; - 活用介词:介词是英语的一大特色,在我们给变量起名的时候也扮演了重要的角色,大量地出现在方法名中,如:
startsWith
、charAt
等; - 有些方法是动名词的形式出现:通过动词向'er'、'ing'、'ed'的变形来命名方法。这类方法名的一大特点是,指向的结果往往是一个对象实例,常见的如
constructor
、cheching
等; - 最后一种方法名,就是纯名词的形式:这种方法通常是输出和获取该对象中某个特定的属性或者变量,这种命名方式本质上就是命名变量,可以参考上文对变量的命名,如:
keys
、items
等。
3. 其它技巧
- 熟练使用局部变量和作用域:有时候同一个变量名会在多处用到,且指向的含义不同。这时候,熟练掌握局部变量和作用域就非常必要了,这让这些相近概念的变量有了使用同一个变量名的可能性,且不会相互影响。常见的例子有
for
循环中的变量i
,就是利用了局部变量和作用域的特性。不过这个方法需要对该语言有相当深刻的理解,否则容易出现变量覆盖。 - 活用匿名函数:匿名函数也是一个减少变量命名的神器,如果能熟练掌握匿名函数的使用,通常可以减少10%左右的变量命名工作。但凡事皆有利弊,匿名函数的缺点是多人开发和维护时会造成理解上的难度。
- 定期检查僵尸代码:可以有效地帮助你清理变量冗余,为变量起名提供更多余地。
四. Github项目分享:
最后,我在这里给大家总结了一些和变量命名有关的Github上的高分项目,大家可以依此学习变量命名技巧:
1. codelf
这是一个变量命名工具。计算机科学中最困难的两件事:缓存故障和命名。这个工具支持直接搜索中文,当您检索中文时,Codelf 会直接翻译单词并找到单词的同义词。然后搜索Github、Bitbucket、Google Code等开源项目的源代码匹配与这些词相关的变量名和函数名。
2. clean-code-php
PHP代码的整洁之道,整理了一系列整洁代码实操。小到变量细到 SOLID 都有涉猎。
以上。