中软首页
中软国际教育科技集团Education and Technology Group of Chinasofti
●  教育部授予:“软件工程专业大学生实习实训基地”资质
●  商务部授予:“中国服务外包示范培训中心”资质
●  工信部授予:国家信息技术紧缺人才培养工程“521计划”资格
●  获得腾讯授予:中国IT教育十大影响力品牌

≡ 技术知识库
当前位置:网站首页>技术知识库>>文章内容
如何给函数取个合适的名字
作者:中软卓越   来源:中软卓越    时间:2016-01-06 15:42:41    字体:[大] [中] [小]


对程序员来说,下面的几个任务,哪个最难?

l 给函数,变量等命名

l 向别人解释我们做什么(或者不做什么)

l 任务估时

l 与别人沟通

l 在别人代码的基础上工作

l 实现你不认同的功能

l 写文档

l 写测试

l 设计解决方案

       Quora 和  Ubuntu Forums thread 上的 4500 个程序员对上面的问题进行投票。49%的程序员认为给函数,变量等命名是最难的任务。

       年少时,我们也曾给函数取过这样的名字

       function doSth(){}// 实在怎么起名字,先凑合叫这个吧。function zds(){} // zds 是“做大事”的拼音缩写。哈哈。function doThing1AndDoTing2(){}// 做事1和事2// 还有更多惨不忍睹的。

       当我们编码渐多,越来越意识到到好的命名对我们理解代码是多么的重要。那么,什么样的名字算是合适的呢?我觉得,如果通过看函数名字能明确的知道函数做了什么,那就是合适的命名。上面的三个名字


l doSth: 这函数名就是废话。不看函数的内容,完全不知道这函数做什么。

l zds: 鬼知道zds是什么简称。

l doThing1AndDoTing2: 虽然我们知道是做了两件事,但也太罗嗦了。比如,我们有一个来做肉的函数,我们这样写


funcion washAndFireAndWrapMeat(){

washMeat();// 洗肉

fireMeat();// 煮肉

wrapMeet();// 将肉装盘}


       如果把这个函数改成 cookMeat 是否更好。

 

下面是一些命名函数的技巧:


·明确函数要做什么

       在给函数命名前,明确函数到底要做什么。这有利于给函数命名。

·以动词开头

       函数总是做些什么,所以当然要以动词开头。

·尽量不要以 do 开头

       do 并不能给我们提供任何函数的信息。相比之下,search, compute, handle 之类的动词暗示着函数大概做了什么。

·返回布尔值的方法以 is 或 are 开头

       用 is 还是 are 取决于判断主体是单个还是多个。如:isButtonEnabled,areButtonsEnable。

·合理的使用 get 作为函数名字的开头

        所有有返回值的函数,好像都可以用 get 作为函数名字的开头。但以 get 开头的函数应该表示取某属性,如


var user = {

    firstName: '',

    lastName: '',

    getFirstName: function(){

        return this.firstName;

    },

    getFullName: function(){

        return this.firstName + this.lastName;

    }}


       否则就不应该用 get 开头。比如,从服务器上获取用户列表,这个方法可以叫 fetchUserList,而不是getUserList;获取某个范围内的所有质数,可以叫 caculatePrime。


·不要包含上下文信息

       如有个 user 对象,有个获取 user 的 id 的函数,应该叫 getId 而不是 getUserId。

·不要包含函数参数的信息

       如用一个 id 和 token 找用户的方法,应该叫 findUser(userId, token) 而不是findUserByUserIdAndToken(userId, token)。如果以 findUserByUserIdAndToken 来命名,那么如果以后函数要支持用其他方式查找用户怎么办,又或是不支持用 token 查找怎么办。

中软国际教育科技微网页二维码
版权所有 © 2008-2014 中软国际教育科技集团    京ICP备09078625号-2   京公安备11010802014778号    隐私声明 | 联系我们