上一篇文章主要介绍了从文档到注释,说明了注释在提高项目可维护性的重要性,还从几个例子中总结得出好的注释和坏的注释的区别。这一篇文章我们主要讨论注释的分类,这里的分类指的是从用途的维度划分的分类。
让我们开始看下有哪些常见的分类。
1.重复代码(Repeat of the code)
重复性地注释只是把代码用文字又描述了一遍,它除了给读者增加了阅读量外,没有提供任何额外有用的信息。
2.解释代码(Explanation of the code)
解释性注释通常用于解释复杂、取巧、敏感的代码块,在这些场景中它们能派上用场,但是通常是因为代码混乱,含糊不清,才体现了这类注释的作用。如果代码太过复杂而需要注释,更好的办法是改进代码,而不是添加注释。重构代码变得清晰后再添加概述性注释或者意图性注释。
3.代码标记(Marker n the code)
标志性注释是为了提醒开发者某处的工作未做完,有的程序员用一些影响语法的标记,例如 ****** ,以便编译器标记它,提醒开发者还有未完成的工作。或者加入一些特殊的字符串,不影响编译又方便搜索,例如TBD 。在一个团队中,更好的做法是把标记型注释的风格规范,不然项目代码中可能会出现五花八门的标记。当然,现在大部分的编辑器都支持 todo 标记,方便团队成员形成统一的认知,编辑器也更容易定位到这样的标记。据我的经验所知,很多代码中打上了todo 标识,但是可能会被遗忘。所以最好的方式,应该是项目在上生产环境之前,应该把所有的这些未完成的代码都finish 。
4.概述代码(Summary of the code)
概述性注释的作用是把一大段代码所做的事用一两句话说出来,这样的代码比重复性注释好多了,因为读者读注释会比读代码更快,这样的注释对于要修改你代码的人尤其有用。
5.代码意图说明(Description of the code's intent)
目的性注释用来指明一段代码的意图,它指出代码要解决的问题,而不是解决的方法。比如:
get current employee information
这是一条目的性注释,然而
update employeeRecord object
则是有关解决方案的概述性注释。IBM做过一项长达六个月的研究,发现负责维护的有经验的程序员喜欢说“领会代码作者的意图是最困难的事”。当然目的性注释和概述性注释没有明显的界限,它们尽管有一些差异,但是无关紧要。
6.传达代码无法表述的信息(Information that can't possibly be expressed by the code itself)
有些信息不能通过代码来表达,但又必须包含在源码中。例如版权声明、保密要求、版本号等杂项信息,与代码设计有关的注意事项,相关要求或者架构文件的索引。
介绍完了注释的种类,我们发现,一般情况下,对于好的代码,应该只允许有三种注释类型:代码无法表述的信息、代码意图注释和概述性注释。你的项目中还有哪些五花八门的注释类别吗?亦或是有很多上述提到的重复代码、解释代码、代码标记等等类型的注释,特别是哪些 todo 字眼遍布着整个项目。希望今天这篇文章能带给你一些对注释的认知,提高项目中注释的质量。
最后
本文是笔者阅读了 《代码大全》 关于注释的章节写的读书笔记,文中观点是读者阅读书后加入自己的理解后提炼出来的,如有不足,望指出或给出更好的建议。这是关于注释的第二篇,下一篇文章我会围绕如何进行高效注释提出一些最佳实践。想了解更多注释的知识,查看往期文章: