嘿,编译通过了!装包吧!
变量、函数或类的名称应该已经答复了所有的大问题。它该告诉你,它为什么会存在,它做什么事,应该怎么用。如果名称需要注释来补充,那就不算是名副其实。
很多程序员,包括我自己,也使用过空泛的词来命名,如temp、tmp、retval等。这些词应尽量避免使用,如果要使用,也要有个好理由。比如使用tmp,它只应用于短期存在且临时性为其主要存在因素的变量。
!> 不好的命名,会增加代码的模糊度.
- 程序员应该避免留下掩藏代码本意的错误线索,避免使用与本意相悖的词
- 注意使用技术用语,如list、map等,若使用,必须检查其类型是否一致。编写业务语言,尽量避免使用技术用语。
- 提防使用不同之处较小的名称
!> 以同样的方式拼写出同样的概念才是信息。
有几个系列,我们都应该避免:
- 以数字系列命名,它是依义命名的对立面。这样的命名纯属误导——完全没有提供正确信息。
- 废话式命名,类似以info、data来命名,它们的意义含混。
- 冗余式命名,这也是废话,如数据库表以Table命名,姓名命名为nameString
!> 要区分名称,就要以读者能鉴别不同之处的方式来区分
?> 代码的坏味道——缺少精准的命名
人来长于记忆和使用单词,人来的大脑有那么大的一块地方用来处理言语,若不善加利用,实在是耻辱。
言外之意,命名尽量不要使用缩写,就算使用,也是使用行业广泛应用的缩写。
使用可搜索的名称,便于我们在一大篇代码中快速定位,避免使用单字母名称和数字常量。
在接口前使用I来标识是接口,这就是废话,一点用都没有。
类名和对象名应该是名词或名词短语,避免使用Manager、Processor、Data、Info这样的类名。类名不应当是动词。
?> 代码的坏味道——乱用英语
方法名应当是动词或动词短语。属性访问器、修改器和断言应该依据其值命名,并依JavaBean标准加上get、set和is前缀。
?> 代码的坏味道——乱用英语
给每个抽象概念选一个词,并且一以贯之。
在编程中,存在很多的单词有相似的概念,如get
、obtain
、find
等,这些词每个团队应确认每个词所对应的概念,行成团队规范,以下可以作为参考:
命名 | 含义 | 适用场景 |
---|---|---|
select /find |
select :强调选择 find :强调找的过程 |
两者都可用于DAO层查询SQL的函数命名,由于JPA适用find 来命名,因此find 也纳入了这个范围,但使用select 更适合。 |
get |
这个词没有表达出很多信息,比较空洞 | 一般JavaBean的Getter 使用 |
fetch |
表达去拿,强调主动去某处拿到某物 | 可用于Service 层查询相关函数的命名 |
acquire |
意为获得,可以主动获得也可以被动获得 | 该词与get 含义比较类似,可以用于其他函数命名,与Get 区分开 |
fetch |
表达去拿,强调主动去某处拿到某物 | 可用于Service 层查询相关函数的命名 |
send |
发送,强调从一个地方到另一个地方 | 可用于发送短信、邮件等类似场景的函数命名 |
dispatch |
带有分发的意思 | 某些函数负责事件分发处理的,则可以使用该词 |
举个栗子:
需求:用户登录成功,需要从用户信息表里面查询用户名字,并展示在界面上。
实践:entry: fetchUsername -> db: selecUserById -> user.getUsername()
避免将同一单词用于不同目的。同一术语用于不同概念,基本上就是双关语了。
代码作者应尽力写出易于理解的代码。我们想把代码写得让别人能一目尽览,而不必殚精竭虑地研究。
记住,只有程序员才会读你的代码。所以,尽管用那些计算机科学术语、算法名、模式名、数学术语吧。
依据问题所涉及领域来命名可不算是聪明的做法,因为不该让写作者老是跑去问客户端每个名称的含义,其实它们早该通过另一名称了解这个概念了。
这里会与代码的坏味道-用技术用语命名冲突,综合考虑,这一块的命名可以参考以下几点:
- 对于业务模型的命名,应当要避免使用技术用语命名,应使用业务领域名称来命名。
- 对于技术模型的命名,如代码实现观察者、MVC三层等与技术相关的,则可以采用技术用语命名。
如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉及问题领域而来的名称吧。至少,负责维护代码的程序员就能去请教领域专家了。
优秀的程序员和设计师,其工作之一就是分离解决方案领域和问题领域的概念。与所涉及问题领域更为贴近的代码,应当采用源自问题领域的名称。
很少有名称能自我说明的——多数都不能。我们需要用有良好命名的类、函数或名称空间来放置名称,给读者提供语境。如没这么做,给名称添加前缀就是最后一招了。
另外,主要短名称足够清楚,就要比长名称好,别给名称添加不必要的语境。
!> 语境的增强也让算法能够通过分解为更小的函数而变得更为干净利落。
不管是类、函数、字段、包等命名,都需要规范起来,不能只顾自己爽,命名得好,也将为阅读你代码的人愉悦,也省下别人的时间。
所以,认真对待命名,提高程序员该有的修养。