您的位置:首页 > 其它

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

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

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

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

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

JavaScript:


C#:


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

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

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

2. 使用情况

对于像“Get”这样的简短方法名还会遇到第二个问题。当通过相同的数据类型有更多的方法可以获得

Person的话,那又会出现什么样的情况呢?可以想象一下,如果我们创建一个新的功能之后就能通过用户的电话号码或社会保险号码来获得一个用户。不过,在这方面方法名“Get”可能在业务上存有高风险。

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

3. 重命名带来的风险

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

依靠编译器可能会涉及以下两个步骤:

改变一个声明来引起编译错误。

导航到这些错误并做出一点改变。

你可以依靠这个编译器在你的程序里做一些结构上的改变。——Michael Feathers

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

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

原文:BitNative

本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)



顶15
踩0

推荐阅读相关主题:
软件开发javascript响应式语言手机设计



相关文章
最新报道

Go 1.2发布 着重语言特性的改进
研发周报:你的数据库准备好过冬了吗
【BDTC讲师】Tachyon作者:大数据存储以及处理框架经验分享
创始人Preston-Werner细说GitHub成长史
美国女性工程师远没有你想象的多
边防:Scrum与PMI的实战与深入思考

【开源推荐】Genome.js:当DNA遇到开源
Go 1.2发布 着重语言特性的改进
研发周报:你的数据库准备好过冬了吗
JVM垃圾收集器使用调查:CMS最受欢迎
百度开源平台上线,聚合百度开源项目
IE11中全新增强的F12开发人员工具



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: