事情大约如下:
对framebuffer进行操作时,我们需要定义一种颜色作为透明色,framebuffer设备驱动有相对应ioctl操作函数, 开始设计时就将其归纳成一个函数, 此函数名命名为fb_set_colorkey(...)。个人觉得函数的命名,实有不妥,一个好的函数命名,应该清楚的告知此函数的功能。fb_set_colorkey,字面上可以理解为设置framebffer的colorkey值,这的确是此函数所完成的操作,但我们还不是不清楚此命名的真正意义和功能。所以我将此函数的命名修改为fb_set_not_display_color(...),此命名清晰的反映了函数所完成的功能,设置framebuffer层不显示的颜色值,也就是只要在framebuffer映射的数据区填充此颜色,就默认不显示颜色(透明)。
后一同事见此修改后, 对其评论说:函数的命名太不专业了。
什么样的函数名是专业的呢? 《代码大全》中给出以下几条指导原则
1 描述子程序所做的所有事情
2 避免无意义的,模糊的动词
3 不要仅通过数字来形成不同的子程序名字
4 根据需要确定子程序名字的长度
5 给函数命名要对返回值有所描述
6 给过程起名使用语气强烈的动加宾语的形式
7 准备使用对仗词
8 为常用操作确立命名规则
比对了这几条指导原则,新的函数命名真没有不专业的的地方。与原来的函数命名相比, 新的函数命名是有点直乎其意,简单明了,但之更好像是优点。写出来的程序,只有模块的开发者能够读得懂是远远不够的,让其它模块的开发者也能够读起代码来不难受,这也是最终目的之一。 ps:想当年,白居易写完的诗,还得拿去给老奶奶先行读过, 老奶奶读懂得了,才能才去发表。
一个好的子程序命名应清楚的表达的函数所做的事情。当程序员第一眼看见此函数名,就能清楚的获知此函数的功能, 而不是还得去猜测函数的意图(上面的例子中,fb_set_colorkey与fb_set_not_display_color进行对比)。