用动态语言编写程序,命名更重要

转载 2013年12月02日 18:10:18

本文作者Cory House是一名软件开发者,独立顾问,热衷于清洁代码、务实开发和响应式本土UI的设计。在文章里,他列举了以JavaScript和C#为例,来说明编程里命名的重要性以及必要性。

大家都知道,良好的变量名和优秀的功能在所有的编程语言里都是及其重要的,那么什么样的命名足够好、能足够体现出重要性呢?有一位评论者觉得“Get”是一个很好的方式名称,并以person.Get(personId)为例来说明他的观点。虽说这个例子相当明了,但是这里仍有三点原因需要考证这么一个短小的功能名称,尤其是在使用动态编程语言编写的程序里,这样的命名是否真的站得住脚呢?

1. 强类型编程语言有助于传达意图

首先,方法名在动态编程语言的作用比在类型语言里的作用要大。为什么,在强类型编程语言里,参数类型有助于传达意图。下面就引用JavaScript和C#为例:

JavaScript:

C#:     

需要注意的是,在用C#语言的时候可能会涉及到的关于保真度的两点额外事项:

  1. 参数类型——在这里你能看到一个类型的PersonId,int就是那个论点。
  2. 返回类型——很显然该方法可以返回一个Person,而且用C#语言的时候没必要通过阅读方法体来知道这一点。

这两点信息有助于更清晰化软件功能的意图。因此,在强类型语言里,完全可以使用更简洁的方法名。

2. 使用情况

对于像“Get”这样的简短方法名还会遇到第二个问题。当通过相同的数据类型有更多的方法可以获得Person的话,那又会出现什么样的情况呢?可以想象一下,如果我们创建一个新的功能之后就能通过用户的电话号码或社会保险号码来获得一个用户。不过,在这方面方法名“Get”可能在业务上存有高风险。

人们可能只是传递了一个手机号码,但是没有意识到这也有可能会透露出个人的PersonID。所以,你最好是将“Get”重命名为“GetByPersonId”,及时解决因简短函数命名而引起的模棱两可。这还没有结束,因为这会导致下面的第三个问题。

3. 重命名带来的风险

有的人可能会认为“GetByPersonId”应该在第一步就使用,而不是到了后面发现了问题才更改,尤其是在使用动态编程语言的情况下。于是,用动态编程语言编写程序就能找到最终问题点:当你决定重新命名变量和函数后,强类别语言为了安全起见允许你“依靠编译器”。这一术语来自于Michael Feathers的书本《Working Effectively with Legacy Code

依靠编译器可能会涉及以下两个步骤:
  • 改变一个声明来引起编译错误。
  • 导航到这些错误并做出一点改变。
你可以依靠这个编译器在你的程序里做一些结构上的改变。——Michael Feathers

如果你使用的动态语言里缺乏支持性能的话,这无疑会增加重命名带来的风险。这也就是为什么一个强有力的测试套件在动态语言里尤为重要的原因——它可以帮助临时替代简单的、不好的参照问题,主要是由于编译器在强类型语言里根本抓不到这些参照问题。

综上所述,要想实现并不是很难,底线是我们生活在一个智能感知、高分辨率、便宜的存储的世界。所以一旦到了必须选择什么样命名的时候,清洁代码程序员应该大胆直面程序的清洁度而不仅仅是追求代码的简短性。特别是在动态编程语言里,这个原则尤其重要。          (编译/薛梁  责编/张红月)

原文:BitNative

15
0

用动态语言编写程序,命名更重要

本文作者Cory House是一名软件开发者,独立顾问,热衷于清洁代码、务实开发和响应式本土UI的设计。在文章里,他列举了以JavaScript和C#为例,来说明编程里命名的重要性以及必要性。 大家...
  • cxzhq2002
  • cxzhq2002
  • 2013年11月05日 11:11
  • 488

动态语言会淘汰静态语言吗?

上一篇博客动态语言会导致开发质量下降吗?,尽管没有我想像的那么多争议,但还是如期引发了一些误解。有一些朋友指出动态语言,具体来说是 Python 中的各种问题。这些我认为是大部分是正确的。我写上文的用...
  • ccat
  • ccat
  • 2011年01月04日 17:54
  • 30222

人物专访:Java虚拟机的动态语言支持

  Java虚拟机的动态语言支持——访Java SE项目负责人丹尼·考沃德 ◎ 文 Frank Sommers / 译 朱海艳  Java SE 6已不再局限于Java语言了,因为SE 6还可以用来执...
  • programmer_editor
  • programmer_editor
  • 2007年12月18日 15:51
  • 4662

职业素养比能力更重要

经历几年的时间,正所谓铁打的营盘,流水的兵。IT行业里,人才流动特别大。而对于企业来说,我自认为员工的职业素养比能力更重要。经历过的团队,见识了各式各样的队友。得益于此,也受害于此。人们常说不怕神一样...
  • nadeal
  • nadeal
  • 2017年08月05日 08:41
  • 409

为什么说完善思维方式比知识结构更重要

为什么说完善思维方式比知识结构更重要? 2016-07-06 互联网周刊 互联网周刊 互联网周刊 微信号 ciweekly 功能介绍 这里是《互联网周刊》。全世界各...
  • xiangbq
  • xiangbq
  • 2016年07月07日 11:46
  • 476

方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要

 清华大学校长给毕业生的一段话   (个人觉得下面有些话说的很有道理,希望您能从中悟出一些对自己有益的道理,对于我们工作的人有时也应该反省反省自己,这个世界确实让人很累,常常忙碌的自己都不知道东西南北...
  • gaomei2009
  • gaomei2009
  • 2009年05月27日 09:29
  • 672

1 方向比距离更重要

      亲历感悟:对于职场中的芸芸众生而言,方向就是我们试图实现的每一个目标,就是我们披荆斩棘辛苦忙碌的终极意义。    高尔夫球是一项非常有趣的运动,之所以能够风靡全球,尤其受到职场人士的喜爱,...
  • mydeardingxiaoli
  • mydeardingxiaoli
  • 2010年10月25日 19:47
  • 407

相关关系与因果关系之探讨——大数据时代读后感(1)

维克托.迈尔.舍恩伯格的《大数据时代》一书如雷贯耳,决心要拜读一番。本打算读英文原版,考虑到时间有限,中文版的也许看得快一些,所以还是读中文版的吧。简单读了几页之后,发现无论译者周涛的文笔,还是其在序...
  • u012033027
  • u012033027
  • 2013年11月23日 00:05
  • 2167

那点代码, 谁都会写!------以后我会在博客中多加入一些思路方面的东东, 少写一些实际的代码

我在第一家公司工作了两年, 当时非常注意代码的各种规范。 公司要求代码必须符合各种规范, 各种圈复杂度, 各种安全函数, 各种静态检查, 动态检查, 各种review, 各种提交前的本地构建, 如此等...
  • stpeace
  • stpeace
  • 2016年06月25日 21:48
  • 2604

浅谈编程思想的重要性

                          浅谈编程思想的重要性                           作者:wfg2005在面向对象编程里,其实你用什么语言不是最重要的,最重要...
  • wfg2005
  • wfg2005
  • 2004年11月18日 14:52
  • 1213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用动态语言编写程序,命名更重要
举报原因:
原因补充:

(最多只允许输入30个字)