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

2014-10-17  来源:本站原创  分类:其它综合  人气:1 

这篇文章主要介绍了每个程序员需掌握的20个代码命名小贴士,需要的朋友可以参考下

代码中到处都需要命名。作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等。下面有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
翻译作者:码农网 ? 小峰

相关文章
  • 每个程序员需掌握的20个代码命名小贴士 2014-10-17

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

  • 观点:程序员需培养企业家式的能力 2010-01-13

    在工程师这个圈子呆久了,我发现大部分的人都有一个共同点,那就是不善表达,或者说懒得表达.在公众面前讲话会脸红,不能很好地表现自己,而且"善于表现自己"其实会被认为是一个缺点??因为大家都觉得有真才实学就好了,而且普遍信奉"低调"的做人哲学,那些善于表现的人会被说成"很能忽悠". 举个例子来说吧,李开复应该算是一个很成功的人了,而且是技术出身,但是你会发现这几年很多人都对他有负面评价,说他"不好好管理公司,整天跑去演讲". &q

  • 冒号和他的学生们-程序员提高班纪事20:前台语言 2014-02-16

    系列文章汇总:<冒号和他的学生们--程序员提高班纪事> 前台语言 运用之妙,存乎一心 --<宋史·岳飞传> 稍事休息后,冒号切换了话题:"接下来简单聊聊Visual Basic和Delphi." 叹号略带得色:"Visual Basic最好用了,建个窗体,从工具箱中拖些控件,再定义一下它们的属性和行为,搞定!" 冒号点点头:"VB最大的优点就是易学易用.上手快开发快,对非计算机专业人士尤其具有吸引力." 引号咬文嚼字:&q

  • 程序员需知的5种静态代码审查 2013-12-14

    静态分析的概念已经提出多年,而在过去的几年里利用该工具评估和诊断代码的技术已日趋成熟.几乎每种语言都存在相应的软件审查工具.这些审查可以在多个领域,如数组,循环,编码风格,设计,复制代码,命名风格,性能等领域中隔离出不良代码.而在每一个层级中又存在另一套完整的审查可供程序员使用. 这里要提醒大家,程序员可能会因审查报告过多漏洞而感到厌烦.笔者曾经看到过一个有20万行的应用程序,用现在的标准来衡量,这当然不算多,此外还运行了200+审查.该报告列出了35万个需要修复的违规之处,这样以来的确是有些麻

  • 程序员的励志故事:月薪1万2小IT职员五年在北京买500万房子 2015-04-29

    1万2小IT职员五年在北京买500万房子 五年前,刚毕业的小柯,只有不知名大学的学历,求职时处处碰壁,最后在北京某间小IT公司上班担任小程序员. 过了半年,小柯觉得这样下去不是办法,突然觉醒,决定订出一个五年买房计划,步步规划彻底执行! "刚开始真的很痛苦,什么交际应酬与娱乐消费都不能做了"小柯回忆道.但是回想起自己过去的人生,其实也这样浑浑噩噩,突然有一股声音在自己体内觉醒,"我开始利用下班时间去上财务规划课程与程序课程,增加自己的实力."利用网络上大大小小免费的

  • 优秀程序员不得不知道的20个位运算技巧 2012-12-12

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

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

    掌握简单的位运算技巧还是必要的,所以今天写这篇文章把我积累的一些位运算技巧分享给大家,这些技巧不会是如求"1的数目"的技巧,是最基本的一行位运算技巧 一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读<编程之美>求"1的数目"时,我才开始觉得位运算是如此之美,后来读到 <Hacker's Delight&

  • 从程序员到项目经理(20):让员工为目标而干活 2014-07-05

    船在大海上航行,需要灯塔的指引.目标就是项目中灯塔.在项目中,目标不但可以指引方向,还可以凝聚人心. 1.把员工团结在目标下面 不善于给工作制定目标的管理者不是优秀的管理者,没有目标的团队也不能称之为团队.一个合适的目标,可以将员工紧紧的凝聚在一起,产生强大的力量.因此,项目经理必须要学会利用这一点,让员工为目标干活,将员工团结在目标下面. (1)目标是领导力的来源,也是团队的基本特征 无论是对个人,还是对组织,目标的重要性都不言而喻.为了"实现共产主义"这一伟大目标,无数革命先烈抛头

  • 某位"20年"程序员的经验(你做到多少?) 2013-09-01

    1. 估算解决问题所需要的时间.不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时.为自己定一个时间限制吧,1小时.30分钟或甚至15分钟.如果在这期间你不能解决问题,那就去寻求帮助,或到网上找答案,而不是尝试去做"超级堆码员". 2. 编程语言是一种语言,只是一种语言.随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处 .你所选择的语言,你应该觉得"舒服",并且能够写出有效(而且简洁)的代码.最重要的,让语言去适应项

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

    编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的 很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全

  • 一个合格的程序员应该读过哪些书 2012-07-12

    编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的? "如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西." 很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时

  • 程序员职业发展的绊脚石-思想的枷锁 2013-11-08

    开篇 首先.我是一个程序员,从大学毕业到现在,已经工作了近5年的时间,看着现在越来越多的朋友进入IT行业,并且年轻才干的做软件开发的朋友们,个个都是生龙活虎,精兵强将,年纪轻轻的就学习了很多知识,我感觉我们做这个已经有点力不从心了,程序员,一提大家都会说是吃青春饭的,是的,在国内的大环境下,如果程序员自身的技术本身并不是很出色,然后年龄又过30了,那么就会有这样的现实问题,现在公司招人,都是从利益的角度出发,会详细的计算所谓的投资回报收益比,这也是我们作为职场人员,给企业打工逃脱不了的问题,所以

  • 10个程序员必须学会接受的残酷真相 2013-12-04

    大多数时候,写代码都是挺有意义的一件事,不光能增加经验值,解决难题的时候还特别爽.耐心.毅力.执着,再加上正确的工具--只要有它们的亲密协作,优雅.漂亮的代码就是手到擒来的事儿. 但是,紧接着拙劣的资源部署.新增的特性请求.糟糕的文档更新汹涌而来,打破了我们的美梦. 但是这并不是说我们的努力就没有价值.只是我们需要面对现实罢了.下面就是编程开发人员必须接受的10个残酷真相. 残酷的开发真相No. 1:编程就是if-then-else语句的运用 编程语言设计者讨论.抽象化思考等等作为,其实都只是在

  • IBM大中华区总架构师 寇卫东:话说程序员的职业生涯 2014-11-06

    有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功.到底选哪条路,取决于自己的兴趣.可能有程序员会问:如果还没找到自己的兴趣怎么办?我的建议是多尝试,努力做,这是职业生涯的必经之路.当你积累了一定的技术和经验之后,就会面临多种选择.选择哪条路,因人而异. 如果对某一种或几种技术非常感兴趣,并且能够持续钻研,经过一定时期的积累,你可以逐渐成长为专家级程序员.专家级程序员对于所掌握的专业技术的熟练程度非一般程序员能及,各类常见编程问题在他们手中都能迎刃而解,

  • "懒"出效率是程序员的美德 2014-11-26

    Perl 之父 Larry Wall 曾说过,程序员的三大美德是「懒惰」.「不耐烦」.以及「傲慢」,其中「懒惰」高居三大美德之首,这一回就让我们来看看程序代码设计的懒人之道. 惰性是人类科技持续进步的最大动力 这字面上的「懒惰」,或许叫人误解,以为这是在暗示好的程序员是因为不愿意尽心投入代码设计工作,才会想要偷懒,尽量让自己少做点工作.不过,能成为卓越程序员的人,几乎没有例外的热爱程序代码设计工作,对他们来说,程序代码设计本身就是乐趣所在,只可能深陷于其中无法自拔,而没有不愿意多写点程序代码的.

  • 让程序员都费解的10大编程语言特性 2014-11-30

    这篇文章主要介绍了让程序员都费解的10大编程语言特性,本文罗列了如javascript.Ruby.Java等语言中让人费解的10个语言特性,需要的朋友可以参考下 每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式.因此,不论新丁还是老手,看着某个特性会突然醉了.文中总结了10个经常被提及的"奇异"特性. 1. Javascript: + 是一个连接符 问题描述: 在JS中,+ 号用在数字间,可以用作常规加法:但如果遇上字符,又可作为字符连接符.例如:'1'+

  • 分享成为高效程序员的7个重要习惯 2014-12-12

    作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友.这里的"高效",我指的是按时完符合要求的项目的能力.经历过不少软件编写工作后,我相信以下实践会帮助你学会"高效",同时提高专业声望.拉长职业寿命,和获得个人满足. Programmer(from good-wallpapers) 1.理解你的需求 成为高效程序员的第一步是,保证时间的合理分配.没有什么比将时间花在完全没有前途的工作上更浪费的了. 尽快开工

  • IBM总架构师寇卫东:话说程序员的职业生涯 2014-12-28

    作者:IBM 软件集团大中华区总架构师 寇卫东 有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功.到底选哪条路,取决于自己的兴趣.可能有程序员会问:如果还没找到自己的兴趣怎么办?我的建议是多尝试,努力做,这是职业生涯的必经之路.当你积累了一定的技术和经验之后,就会面临多种选择.选择哪条路,因人而异. 如果对某一种或几种技术非常感兴趣,并且能够持续钻研,经过一定时期的积累,你可以逐渐成长为专家级程序员.专家级程序员对于所掌握的专业技术的熟练程度非一般程序

  • 给程序员新手的一些建议 2015-02-19

    前段时间因为实习生计划花了很多时间做了实习生招聘的工作,产生的一些想法,写在这里. 这次招聘过程中,我发现我们在校的学生有下面的这些特点: 1)NB的项目.当说到自己做过的项目时, 我发现他们做的事都是很NB.要么是研究Linux的底层内核,要么是图像识别处理,要么是推荐算法,要么做高性能计算,要么做数据挖掘,要么是移动方面的协议,还有一些很高深的课题我听不太懂的项目.这让我想起当年我在学校里的实习,对比起我用Java Applet 和 HTML做操作系统的教学课件,或是在公司里用Delphi/

  • 程序员的18个有趣的事实 2014-01-17

    如果第一次运行不成功,那就叫它1.0版吧. 我的程序永远不会有bug.那些只是开发出来的随机的功能特征. 嗨!编译通过了!赶紧打包发布! 最难调试的代码是那些你知道不可能有错的代码. 我的观点不是不对,只是还处于beta版中. 小心那些带着改锥的程序员. COBOL程序员理解为什么女人痛恨周期. 如今的编程是一场程序员和上帝的竞赛,程序员企图开发出来更好更大的傻瓜都会用的软件,而上帝总能创造出更'大'更'好'的傻瓜,所以,上帝总是赢. 程序员的开窍起始于理解'让程序运行起来'和'一个可运行的程序