每个程序员需掌握的20个代码命名小贴士

代码中到处都需要命名。作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等。下面有20条小贴士能帮助你提高你的命名能力。

1.使用能够表达意图的名字

名字得能告诉我们它要做什么,为什么存在,以及是如何工作的。选择能够表达意图的名字,将更有利于我们理解代码。

int d; // elapsed time in days

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

在上面的片段中,我们只能从注释中知道变量d指的是什么。于是阅读代码的人为了知道它的含义就不得不去寻找它的实例以获取线索。所以,要是我们能够好好命名这个变量,阅读代码的人就能够瞬间知道这变量的含义。

2.不要怕在选择名字上花时间
你应该多试几种不同的名字,直至足以描述其含义,千万不要害怕在这上面花时间。以后阅读你代码的人(包括你自己)将会因此而受益。此外,一个描述性的名称甚至还能有助于你在心中理清模块的设计。良好的命名的确需要花费时间,但是从长远来看,利大于弊。

3.重构名字
如果你在后面的开发过程中想到了一个更好的名字,那就不要犹豫,马上去改吧。现在的IDE使得重构名字变得异常容易。

4.避免在名字中出现干扰词
比如Manager、Processor、Data、Info以及“我不知道这叫什么”的同义词,都是干扰词。如果你需要使用上面这些干扰词的话,那么说明你的命名可能太累赘了。

5.小心难以命名的类/功能
一个很难命名的类或函数很有可能是一个代码异味。这说明:

代码做得太多。
代码做得还不够。
你对此问题理解得还不够透彻,需要先获取更多的信息。
6.类名
类应该有个名词或名词词组的名字,如Customer、WikiPage、Account和AddressParser。继承性父类应该给个又短又有冲击力的名字。子类的名字应该长点,通过形容词来描述其不同于它的父类之处,如SavingsAccount衍生于Account。

7.变量名
变量名也应该是名词。它们大多是由其指向的类衍生出去的。布尔变量应写成谓词的形式,如isEmpty和isTerminated,这样放到if语句才便于理解。

8.方法名
方法名应该是一个动词或动词词组,如postPayment()、deletePage()和save()。访问器和调整器应该分别前缀get和set。返回布尔值的方法应该前缀‘is',如isPostable(),这样在if语句中才便于理解。

9.范围大小与变量名的长度
变量名的长度应和它的范围大小相匹配。如果变量的范围很短,那么变量名的长度也应该很短。反之,变量名则应该长一点,更有描述性。

10.范围大小与方法/类名的长度
对于方法和类名的长度则应该与其范围成反比。对于公共方法,短一点的名字会比较好,这是因为它们会被调用多次。私有方法只在类的范围内被调用,长一点的名字反而可以作为文档使用。此条规则的例外是派生类的名字。类越派生,基类前所加的形容词就越多,名字也就越长。

11.一个概念一个词
为某个抽象概念选定一个词,然后就不要变了。例如作为不同类中的等效方法,get()、fetch()和retrieve()会让人混淆起来。保持一致的词汇是程序员驾驭代码的重要工具。

12.不要将同一个词用于两个不同的概念
如果你遵循第11点——一个概念一个词的原则,那么就可以避免许多有着相同方法名的类。只要参数列表和各种方法的返回值在语义上是等价的就没问题。只有当你将同一个词用于两个不同的概念时才会出现问题。

例如,我们可以在多个类中使用add()方法,通过添加或连接两个现有的值来创建一个新的值。如果我们之后又需要在类中引入一个add方法用于添加参数到集合中,这就会因为语义不同而导致问题。这种新方法最好是改叫为insert()。

13.使用解决方案领域的名字
我们编写的代码今后可能会有其他程序员来阅读,所以我们使用一些技术术语进行代码命名会带来很大的好处。比如适当地使用算法名字、设计模式名字以及数学术语,这些命名方式很可能会让其他程序员更容易理解程序,引起共鸣。

14.使用问题领域的名字
如果实在找不到易于理解的技术术语来命名,那么也可以从问题领域来寻找合适的代码命名。当未来阅读你代码的程序员不确定代码意义的时候,这将为他们提供一些问题的线索。

15.添加有意义的语境
大多数名字其本身是没有意义的,并且需要放到语境(类/函数/命名空间)中,才能让阅读代码的人理解它们指代的是什么。在某些情况下,可能需要前缀名称以补充语境。例如,假设我们有一些用来表示地址的变量:firstName、lastName、street、houseNumber、city、state和zip。如果只看state这个变量,我们是很难推断出它指的是什么意思,一个比较好的解决办法就是将这些变量封装到Address类中。

16.不要添加没来由的语境
只要意思明确,短一点的名字通常比长的好,所以不要多此一举地添加语境。名字前不应该被加缀一些可以从类/包/命名空间中推断的不必要的信息。

17.避免编码
鉴于现在的IDE的强大,我们已经不需要编码类型和范围信息到变量名和类名中。这包括不必添加I至接口,因为使用代码的用户不需要知道他们的类正在向接口传递。所以如果你一定要使用编码,那么最好是对实现进行编码而不是接口。

18.避免错误的信息
不要给一些错误的信息,因为这样会误导阅读代码的人。如果你将一个实际支持数组的变量命名为accountList,那就很容易让人得出错误的结论。

19.使用读不出来的名字
编程是一个社会化的活动,使用那些读不出来的名字只会阻碍我们的讨论。

20.使用易搜索的名字
使用短而通用的名字会妨碍我们在代码库中搜索事物。这对我们操纵代码和重构很有影响。

最后,如有不同意见,欢迎不吝赐教。

译文链接:http://www.codeceo.com/article/20-naming-tips-programmer-know.html
英文原文:20 Tips for Better Naming
翻译作者:码农网 – 小峰

(0)

相关推荐

  • 每个程序员需掌握的20个代码命名小贴士

    代码中到处都需要命名.作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等.下面有20条小贴士能帮助你提高你的命名能力. 1.使用能够表达意图的名字 名字得能告诉我们它要做什么,为什么存在,以及是如何工作的.选择能够表达意图的名字,将更有利于我们理解代码. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification;

  • 程序员必知35个jQuery 代码片段

    jQuery如今已经成为Web开发中最流行的JavaScript库,通过jQuery和大量的插件,你可以轻松实现各种绚丽的效果.本文将为你介绍一些jquery实用的技巧,希望可以帮助你更加高效地使用jQuery. 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); });

  • 经验丰富程序员才知道的15种高级Python小技巧(收藏)

    目录 1.通过多个键值将对象进行排序 2.数据类别 3.列表推导 4.检查对象的内存使用情况 5.查找最频繁出现的值 6.属性包 7.合并字典(Python3.5+) 8.返回多个值 9.列表元素的过滤 filter()的使用 10.修改列表 11.利用zip()来组合列表 12.颠倒列表 13.检查列表中元素的存在情况 14.展平嵌套列表 15.检查唯一性 1.通过多个键值将对象进行排序 假设要对以下字典列表进行排序: people = [ { 'name': 'John', "age&quo

  • 程序员的七夕用30行代码让Python化身表白神器

    转眼又到了咱们中国传统的情人节七夕了,今天笔者就带大家来领略一下用Python表白的方式.让程序员的恋人们感受一下IT人的浪漫.    一.词云制作 首先咱们可以用之前介绍过的wordcould包制作词云.wordcloud包安装十分简单.pip即可完成安装 pip install wordclould 然后需要制作一个背景图片,为了应急我用艺术字做了个七夕的图片,如果大家来不及直接图片另存为使用下图即可. 具体制作的词云的代码如下: from wordcloud import WordClou

  • 程序员喜欢的5款最佳代码比较工具

    俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧任劳任怨的埋头苦干,梦想着用自己码下的代码改变世界.工欲善其事,必先利其器,每一位程序员都有自己私藏的编程必备工具,接下来小编就给大家推荐5款程序员最佳的代码比较工具. 一:Beyond Compare 推荐:★★★★★ Beyond Compare可以很方便地对比出两份源代码文件之间的不同之处,相差的每一个字节用颜色加以表示,查看方便,支持多种规则对比. Beyond Compare选择最好的方

  • 程序员都不知道C语言中的这些小细节

    既然题目都说了是小细节,一来就介绍细节多没意思啊,先坑坑大家再详细介绍吧,嘿嘿.直接上7个题吧,看看你能做对几个呢? 计算型细节 ①: #include <stdio.h> int main() { char a = 3; char b = 127; char c = a + b; printf("结果是:%d",c); return 0; } 您想想这个题的答案是多少?先不要看后面的答案哦 答案是 -126, 嘿嘿,是不是答错了呢?先不要着急,继续看下面的题 ②: #in

  • 10个C#程序员经常用到的实用代码片段

    1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: {0}", os.Platform); Console.WriteLine("Service Pack: {0}", os.ServicePack); Console.WriteLine("Version: {0}", os.Version); Consol

  • 优秀程序员必须知道的20个位运算技巧

    一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读<编程之美>求"1的数目"时,我才开始觉得位运算是如此之美,后来读到 <Hacker's Delight>,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一个普通的程序中大量运用这样的代码的人简直是疯了!但掌握简单的位运算技巧

  • Java程序员编程性能优化必备的34个小技巧(总结)

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问: 控制实例的产生,以达到节约资源的目的: 控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2.尽量避免随意使用静态变量 要知道,当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如: 此时静态变量b的生命周期与A类同步,如

  • 一个合格的程序员应该读过哪些书(偏java)

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来, 就是我们本能所说的"编写整洁的代码".这本书有50页在谈论代码布局

随机推荐