如何给函数取个合适的名字

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

  • 给函数,变量等命名
  • 向别人解释我们做什么(或者不做什么)
  • 任务估时
  • 与别人沟通
  • 在别人代码的基础上工作
  • 实现你不认同的功能
  • 写文档
  • 写测试
  • 设计解决方案

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

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

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

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

  • doSth: 这函数名就是废话。不看函数的内容,完全不知道这函数做什么。
  • zds: 鬼知道zds是什么简称。
  • doThing1AndDoTing2: 虽然我们知道是做了两件事,但也太罗嗦了。比如,我们有一个来做肉的函数,我们这样写
funcion washAndFireAndWrapMeat(){
    washMeat();// 洗肉
    fireMeat();// 煮肉
    wrapMeet();// 将肉装盘
}

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

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

明确函数要做什么

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

以动词开头

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

尽量不要以 do 开头

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

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

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

合理的使用 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 查找怎么办。

参考


本文遵守创作共享CC BY-NC-SA 4.0协议 网络平台如需转载必须与本人联系确认。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Flutter入门到实战

封装工厂类创建BottomNavigationBar的addItem

●  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

1022
来自专栏用户2442861的专栏

C++ 智能指针详解

http://blog.csdn.net/xt_xiaotian/article/details/5714477

6511
来自专栏about云

hadoop开发必读:认识Context类的作用

问题导读: 1.Context能干什么? 2.你对Context类了解多少? 3.Context在mapreduce中的作用是什么? 本文实在能够阅读源码...

3504
来自专栏Albert陈凯

Scala代码编写中常见的十大陷阱

很多Java开发者在学习Scala语言的时候,往往觉得Scala的语法和用法有些过于复杂,充满语法糖,太“甜”了。在使用Scala编写代码时,由于语法和编写习惯...

2555
来自专栏嵌入式程序猿

号外号外:无规矩不成方圆(4)

本文MISRA规则由嵌入式程序猿整理自网络,版权归原作者所有 不能使用三字母词 三字母词由2 个问号序列后跟1 个确定字符组成(如, ??- 代表“ ~”(非)...

2715
来自专栏Spark学习技巧

Flink DataStream编程指南

Flink程序是执行分布式集合转换(例如,filtering, mapping, updating state, joining, grouping, defi...

2K7
来自专栏Phoenix的Android之旅

你不知道的Interface的骚操作

"难道面试不顺利?"小A心想。于是问小呼都问了什么。小呼说,面试官问了个奇怪的问题,

812
来自专栏磐创AI技术团队的专栏

干货 | 如何写一个更好的Python函数?

《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。

801
来自专栏前端开发

javascript逻辑运算符“||”和“&&”

1924
来自专栏苦逼的码农

Hash冲突之开放地址法

比如说我的输入是任意一个自然数(0,1,2,3...),而我要求经过一个函数后我的输出的数的范围要在0-9这样一个范围之间。

6112

扫码关注云+社区

领取腾讯云代金券