你好,我是猿java。
作为一名 Java程序员,如果把j9九游会老哥俱乐部app代码比作孩子,代码质量就如同孩子的健康,因此,作为技术人员,日常工作势必坚守两条红线:
对于这两条红线,其实不难理解,总结成一句话:在规定的时间内交付高质量的代码。
那么,什么是高质量的代码?如何才能写出高质量的代码?为什么有的程序员工作 5年,写出来的代码质量还不如 3年的程序员?今天我们就来聊一聊。
代码的 好 与 坏 是一个相对的描述,因此,高质量代码也是一个很宽泛的概念,很难给它下一个精准的定义,但是,我们可以结合日常的开发工作经验,给出几个常见的衡量维度:
高质量的代码首先需要具备可读性,我们编写的代码除了需要让机器能编译运行之外,更需要让程序员读懂,因为只有程序员读懂了它,才能更好地修 bug,添加新功能,做后期维护等等。
可能有小伙伴会说,Spring的源码很难读懂,因此它不具备可读性,这种理解是错误的,Spring框架是 Java生态中比较优秀的开源代码,读不懂是因为 内功 不够,本文的可读性是指代码命名是否规范,注释是否合理,分层是否清晰以及是否具备高内聚低耦合等特性。
现实工作中,很难遇见一次性代码(开发部署完之后再也不需要迭代),大部分情况都需要在一个模块上不断地迭代新功能和新代码,因此,高质量的代码必须具备可维护性。
可维护性反馈到代码上,可以通俗地表达成:bug能修改,老代码改得动,新功能可添加。而这些更改花费的代价就体现了可维护的难和易,比如:改动是否会增加大量的新 bug,改动对现有的逻辑的破坏性有多大,或者说改动的时间是否会很长。
在代码设计 SOLID 中有一个很重要的原则就是开闭原则,要求代码需要 对修改关闭,对扩展开放 ,因此,高质量的代码需要具备可扩展性。在应对业务迭代时,开发者需要多关注代码能否用最小的改动来适配新的功能。
在日常开发中,尽量不重复造轮子,具体到代码上,不应该出现大量重复的代码,代码应该保持简洁,重复的代码可以抽离出来,实现代码复用。因此,可复用性也是衡量高质量代码的一个重要标准。
单测是开发人员保证代码质量的一个重要方法,因此,编写的代码是否具备可测试性,也是衡量代码高质量的一个标准。如果编写的代码很难写单元测试,那是否意味着代码设计存在很大的问题?
在分析了高质量代码的几个常用衡量维度之后,我们可以总结:所谓高质量的代码,其实就是衡量能否写出可读性好,易维护,易扩展,复用性高,可测试的代码。
接下来提供十种高效提升代码质量的方法。
众所周知,一个好的名字可以使人受用一生,对于代码也是如此,好的命名可以帮助读者更好地理解代码的功能。
对于计算机科班出身的小伙伴,或许在大学的第一节编程课就被强调:代码命名要简明扼要并且见名知意,不要使用拼音,不要使用非公认的缩写等等,下面为代码命名的几点建议:
(1) 使用常见的英文单词,不使用拼音
代码的命名,应该尽量使用常见的英文单词,这样对于大部分人来说能够知道其意图。不要使用拼音命名,在软件开发领域,英文是主要的编程语言和命名规范。使用拼音给代码命名违反了行业的惯例和标准而且可读性差。
(2) 使用公认的缩写,否则使用全称
有时候,为了简化命名,会使用缩写,但是这些缩写一定要是业内大家公认的,比如:Impl 指代 Implement, str 指代 String,num 指代 number,del 指代 delete。
(3) 使用和团队一致的命名风格
现在的开发大部分是团队合作,因此,代码命名应该在团队内部保持一致,比如:和数据库交互的 Reporitory层,一般都是 CRUD方法的封装,如果团队使用 selectXXX 代表查询,我们就不要使用getXXX 或者 queryXXX,这样检索查询的方法时,可以根据select定位,同理,对于添加数据是使用 addXXX 还是 saveXXX 或者 insertXXX,也需要保持一种方式。
(4) 命名不要太长
命名要尽量的简短,而且能准确的传达意思,如果需要使用长命名,建议不要超过5个单词。
温馨建议:如果你在日常工作中对于命名拿不准时,可以给身边的同事参考,看看他们对该命名是否和你的本意是一致,这样也能帮助你更好的去命名。
命名可以帮助读者从字面上了解代码的功能,但无法传达代码更多细节,因此,需要借助注释来完成这部分功能。喜欢查看源码的小伙伴应该可以发现,在 JDK,Spring等这些优秀的开源框架的源码中,类,方法甚至变量,几乎都有相应的注释,而我们在使用某个功能时,最直接的方式往往是通过官方提供的注释来了解其功能,因此,注释的重要性可想而知。
因此,注释是命名的补充和增强。
注释需要写什么内容呢?这里以 java.util.Collections 为例, 如下图:
通过 JDK 的 Collections源码注释可以看出:注释的内容大概包含 5部分信息:what, why, how, time, authors 即是什么?为什么?怎样做?时间 和 作者。我们可以根据需要灵活的搭配来添加注释。需要注意的,注释也需要简明扼要,尽量使用一些提炼,解释和总结性的语句,切勿长篇大论。
一个好的代码风格可以让代码看起来很清爽,降低代码阅读的复杂度。代码风格主要体现在以下几点:左括号风格,代码缩进,空行,超长行,魔数,方法代码过多,方法参数过多
以上代码风格如果是团队合作,最好是保持一致。更多代码规范 推荐《代码整洁之道》和《阿里巴巴开发手册》
如下的伪代码,当 user == null时,可以通过 return快速短路返回,去除多余的 esle 语句。因此,在日常业务开发中,遇到类似的情况,一定要做到快速短路,切莫使用大量嵌套。比如 if-esle 语句可以使用 return 快速短路;对于 for 循环可以使用 break,continue,return等提前跳出,减少不必要的遍历;