这几周明显感觉自己有些懒散了,是时候调整一下,激励自己了。💪

以前在读《代码整洁之道》时,没什么特别的感悟,感觉也就那样。今天在动车上的一小时内,重温了第二章《有意义命名》,感触颇深,可能与我最近接手的一个老旧项目有关吧。接下来,我想结合最近的项目谈谈我的感想。💡

命名的重要性

不要轻视命名的重要性。在我看来,一个程序的原子部分是由无数个命名组成的,就像一部电影的背后有许多有名有姓的人共同努力一样。对于中国人来说,命名本身就是一个很讲究的事情。一个孩子的出生,父母会精心挑选一个好听的名字;同样,程序员在开发程序时,也应该选择得体的命名,使其名副其实。🌟

切忌拼错单词

最近我对此深有体会。一个庞大的项目,几经转手,因为最初的开发者拼错了一个单词,这个错误一直遗留至今。这种感觉就像是在一碗美味的汤里掉进了一颗老鼠屎,后来的人想改却又不敢改,一动就会影响全局。小病不早治,大病要人命啊。不论是数据库设计还是程序设计,不确定的单词查查字典,多查几次自然就记住了,发现拼错就要立即纠正。📖

每个概念对应一个词

这是《代码整洁之道》中的一个小标题。在项目中,我也见过中文理解上是同一个词,但使用不同的英文单词的情况。如果是多人开发,这种情况就会变得更加混乱。不以规矩,不能成方圆。在项目的初期,就应该与团队成员约定一些常用的方法命名,例如:

  • 获取多个数据: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,金融领域的术语,你知道是什么意思吗?🔍

希望以上分享对你有所帮助,让我们一起写出更整洁的代码吧!👩‍💻👨‍💻

标签: 命名规范

添加新评论

😊