程序开发中命名的那些事
这几周明显感觉自己有些懒散了,是时候调整一下,激励自己了。💪
以前在读《代码整洁之道》时,没什么特别的感悟,感觉也就那样。今天在动车上的一小时内,重温了第二章《有意义命名》,感触颇深,可能与我最近接手的一个老旧项目有关吧。接下来,我想结合最近的项目谈谈我的感想。💡
命名的重要性
不要轻视命名的重要性。在我看来,一个程序的原子部分是由无数个命名组成的,就像一部电影的背后有许多有名有姓的人共同努力一样。对于中国人来说,命名本身就是一个很讲究的事情。一个孩子的出生,父母会精心挑选一个好听的名字;同样,程序员在开发程序时,也应该选择得体的命名,使其名副其实。🌟
切忌拼错单词
最近我对此深有体会。一个庞大的项目,几经转手,因为最初的开发者拼错了一个单词,这个错误一直遗留至今。这种感觉就像是在一碗美味的汤里掉进了一颗老鼠屎,后来的人想改却又不敢改,一动就会影响全局。小病不早治,大病要人命啊。不论是数据库设计还是程序设计,不确定的单词查查字典,多查几次自然就记住了,发现拼错就要立即纠正。📖
每个概念对应一个词
这是《代码整洁之道》中的一个小标题。在项目中,我也见过中文理解上是同一个词,但使用不同的英文单词的情况。如果是多人开发,这种情况就会变得更加混乱。不以规矩,不能成方圆。在项目的初期,就应该与团队成员约定一些常用的方法命名,例如:
- 获取多个数据:
find* - 获取单个数据:
get* - 物理删除:
delete* - 逻辑删除:
remove*
之后就靠程序员自身的素质了。👩💻
少用废话
类型为 List 的变量,在命名时硬是加上 list,这不是多此一举吗?之前有幸与我的高级项目经理一起吃饭聊天,他有10年的编码经验。当时我问他为什么变量前面总要加 _ 作为前缀,他说这是为了区分作用域。我对此不太赞同。对于老程序员来说,他们可能从 C 语言一路走到 Java,因此编码风格上会有一定的影响。但对于我这种一开始就接触 Java 的人来说,Java 的作用域本身就只有几种,没有必要特意用前缀区分。同样,一个类变量,你无法知道它返回的具体值,比如 Person personString,这显然是错误的。也许现在 Person 返回的是 String,但将来类的返回值一旦变化,这个变量名就失去了意义,所以少用废话。🚫
名字多了就打包
举个例子,一段很糟糕的代码如下:
public List<Person> findPersonByDate(Map<String, Object> params) {
List<Person> person = null;
if (params.get("startDate") != null) {
// doSomething;
} else if (params.get("endDate") != null) {
// doSomething;
} else {
// doSomething;
}
return person;
}这段代码的问题在于传入的是 Map,谁也不知道内部需要哪些参数,甚至需要一份手册文档来对应这个接口。稍微改进一下:
public List<Person> findPersonByDate(Date startDate, Date endDate) {
List<Person> person = null;
if (startDate != null) {
// doSomething;
} else if (endDate != null) {
// doSomething;
} else {
// doSomething;
}
return person;
}这样已经好一些了,至少别人能下手了。但如果传入的参数很多怎么办?要求调用者一个一个填写,万一顺序乱了呢?这时面向对象的优势就显现出来了:
public List<Person> findPersonByDate(DateQuery dateQuery) {
List<Person> person = null;
if (dateQuery.getStartDate() != null) {
// doSomething;
} else if (dateQuery.getEndDate() != null) {
// doSomething;
} else {
// doSomething;
}
return person;
}创建一个 DateQuery 类,包含你需要的所有参数,让调用者自行构建这个类。有了 IDE 的提示,他们就不会再问你要传什么参数了。所以,如果参数多,就把它们整合成一个类,打包起来吧。📦
英文还是中文
这是个很有中国特色的开发问题:到底是用中文命名还是英文命名?按我的高级项目经理的说法,你连中文都说不好,用什么英文?确实,许多领域模型中的英文单词非常专业,初看可能不太懂。但我个人更倾向于使用英文。不懂可以查词典,一回生二回熟。而中文,尤其是拼音缩写,第一眼看过去同样难以理解,英文至少可以通过查字典解决,而拼音则只能靠猜了。yzyq,金融领域的术语,你知道是什么意思吗?🔍
希望以上分享对你有所帮助,让我们一起写出更整洁的代码吧!👩💻👨💻