1. 从一次痛苦的代码评审说起
上周,我们团队来了个新人小张,我让他先熟悉一下一个老项目的订单模块。这个模块不算复杂,但代码是几年前写的,当时团队规模小,大家写代码比较“随性”。小张看了半天,给我发来一段代码,问我:“哥,这个 getPdList 方法返回的到底是啥?Pd 是 Product 的缩写,还是 PurchaseDetail?还有这个 isDel 字段,我看数据库里叫 is_deleted,但实体类里叫 del,getter 方法又是 isDel(),我到底该用哪个?”
我一看,好家伙,一段不到50行的代码,命名上的“坑”就有三四个。PdList 这种自创缩写,除了原作者没人能懂;布尔字段命名不一致,导致序列化可能出问题;变量名 a, b, c 随处可见,完全不知道在干什么。小张花了一下午,才勉强理清这段代码的逻辑,效率极低。
这让我想起了《阿里巴巴Java开发手册》(我们常说的“阿里规约”)里反复强调的命名规范。以前总觉得这些条条框框有点死板,限制“创造力”。但当你真正带过团队、维护过大型项目,尤其是新人接手老代码时,你就会发现,一套好的命名规范,根本不是束缚,而是最高效的沟通工具和最基础的信任契约。它让代码自己会说话,让团队成员之间无需额外沟通就能理解彼此的意图,从而把精力真正集中在解决业务问题上。今天,我就结合自己踩过的坑和团队协作的经验,跟你聊聊命名规范背后,那些关于代码可读性和团队协作效率的深层逻辑。
2. 命名是代码的“第一印象”:可读性的基石
我们常说“人如其名”,代码也一样。一个糟糕的命名,就像一份字迹潦草、语焉不详的说明书,让人看得一头雾水。而一个好的命名,则像一份结构清晰、用词准确的文档,能让人迅速抓住重点。
2.1 命名的“望文生义”原则
阿里规约里有一条核心原则:可读性优先于长度。宁可名字长一点,也要确保“望文生义”。我见过太多为了省事而创造的“黑话”缩写。
比如,一个处理用户订单缓存失效的类。按“偷懒”的写法,可能就叫 OrdCacheMgr。新人看了会懵:Ord 是 Order 还是 Ordinary?Mgr 是 Manager 还是 Merger?但如果遵循规约,我们至少可以写出 OrderCacheManager,意思清晰多了。更进一步,如果能体现其职责,比如 OrderCacheEvictionScheduler(订单缓存失效调度器),那就几乎不需要注释,读者一眼就能明白这个类是干嘛的。
再举一个我亲身经历的例子。曾经维护过一个方法,叫 procData()。光看这个名字,你能猜出它是处理数据、清洗数据还是计算数据吗?实际上,它是用来“根据用户行为日志,计算并更新用户兴趣标签”。后来我们重构时,将其重命名为 calculateAndUpdateUserInterestTagsFromLogs()。虽然名字长了,但任何一个新同事看到这个方法名,都能立刻理解它的功能和边界,再也不用钻进方法


3551

被折叠的 条评论
为什么被折叠?



