携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
我们写程序的时候,随处可见命名这个操作,给方法命名,给属性命名,给类命名,给参数命名,给项目命名。相信每个人都有一套自己的命名逻辑。有好有坏,这里稍微介绍几点好的思路吧。
虽然demo是java的,但是思路是前后端共有的,前端的小哥哥小姐姐们也可以瞅瞅。
起名要名副其实
Date d;//创建时间
其实,一个命名需要用注释解释来告诉读者这是什么的时候,就已经不名副其实了。
Date createDate;
选择体现本意的名称能让后来的兄弟读我们的代码更轻松,特别是在其他地方引用或者设置属性的时候,将一眼就可以看出来是在做什么,而不需要额外的注释。
setCreateDate()
避免误导
在起名时要避免留下掩藏代码本意的错误线索。
String accountList;//该用户所有的账户
不要这样做,List这个词对于程序员来说有特殊的意义。除非这个accountList真的是个list,在代码中看到list一定是准备for的。所以在这里accounts是比较好的,即表示了不是一个账户,也不会引起误解。
还有
public Order cancleOrderInfo();
public Order cancle0rder1nfo();
见过这样的代码吗?有什么区别,有的大佬数字0和字母O。数字1和大写的I混用。这对后来维护代码的兄弟简直是灾难。
还有之前项目中有个这:
String USA;//user subbmitted address 用户提交的地址
不得不说,这读起来顺口,误导性太强了。
做有意义的区分
当类似的属性有两个的时候,我们可能会如下操作。
String name;//姓名
String name2;//昵称
但是在其他地方使用的时候,会不会搞混而不知道用哪个,时常返回来看注释。
这样是不是更好呢。
String name;//姓名
String nickName;//昵称
还有,时常看到有的兄弟这样命名。
String nameString;
int sexInt;
String addressString;
大概是为了当之后使用的时候易于分辨这个参数是什么类型的,但是真的没必要,name还能是个long吗。
还有
getUserInfo();
getUserInfos();
getUser();
若是你接手了一个老项目,需要获取用户信息的时候,看到这你一定得停下澎湃的思路,回头去查看每个方法都干了什么,而确定自己需要调用哪个方法。
使用读的出来的名称
这就说到用大写的缩写来命名的了,当和同事讨论代码功能但是名称读不出来的时候,你就知道多尴尬了。
public void updateymd();//修改年月日
public void chms();//change hh:mm:ss
当你给旁边同事说“这个阿普得特外哎木地”这个方法咋咋咋的时候,是不是像个傻喵。那下边的呢,是不是更扯,没有注释的话,光看名字给你半年都不知道这是啥。
之前写的贷款项目,里边充斥了这种命名,还是中文缩写。
String yhxx;//用户信息
作为项目的老人手,或许都得猜一猜,新人更惨了。
使用可以搜索的名称
这个大多体现在方法名上,方法名相对与类名,大多为动词。当我们需要查看某一个方法的时候,能根据语义直接搜出来是再好不过了。
public void cancleOrder();
这个方法,当你找删除订单的时候,是不是首先想到的就是这个。直接一搜,没有找到也八九不离十了。
可是对于i,a这种,想在一个程序的源代码中靠搜索找到用i命名的一个参数,简直不可能。
还有
int sum = 0;
搜索的时候,相信sum会有很多的,加上类型,是不是更便于理解和查找。
int timeSum = 0;//时间总和
别搞笑
如果你将删除方法写成:
public void boom();
boom是爆炸的拟声词,当有人看到这段代码并且读懂的时候,一定会笑出声来,因为这太可爱了。但是也给代码的解读工作带来了负担。最好做到言到意到,意到言到。
每个概念对应一个词
这一点我做的不好,想到啥起啥名。
public void getUser();
public void fetchUser();
public void queryUser();
当你建了三个方法分别叫这三个名的时候,回过头来看,他们的作用会不会是一样的。获取的时候,统一用get而不是query,删除delete而不是cancle,修改用update而不是modefy。这不是铁律,而是需要每个人有自己的规则。
大概就有这么多,大家在工作中遇到过哪些奇怪的命名或者有更好的思路也可以提出来,我会继续整理发文。