13.1 挑选约定
编写注释的第一步是确定注释的约定,例如你将注释什么以及你将用于注释的格式。 如果你正在使用的编程语言带有文档编译工具,例如用于 Java 的 Javadoc、用于 C++ 的 Doxygen 或用于 Go 的 godoc,请遵循这些工具的约定。 这些约定都不是完美的,但这些工具提供了足够的好处来弥补这一点。 如果你在一个没有现成约定可循的环境中编程,试着采用一些其他类似的语言或项目中的约定;这将使其他开发者更容易理解和遵守你的约定。
约定有两个目的。首先,它们确保一致性,这使得注释更容易阅读和理解。其次,它们有助于确保你确实在写注释。如果你对于要注释什么内容以及如何写注释没有一个明确的想法,最后的结果往往就是没有写注释。
大多数注释属于以下几类之一:
接口:紧接在一个模块声明之前的注释块,例如类、数据结构、函数或方法。这种注释描述的是模块的接口。对于一个类,注释描述了该类提供的整体抽象。对于一个方法或函数,注释描述了它的整体行为、它的参数和返回值(如果有的话)、它产生的任何副作用或异常,以及调用者在调用该方法之前必须满足的任何其他要求。
数据结构成员:数据结构中字段声明旁边的注释,例如类的实例变量或静态变量。
实现注释:方法或函数代码内部的注释,描述代码内部如何工作。
跨模块注释:描述跨模块依赖关系的注释。
最重要的注释是前两类。 每个类都应该有一个接口注释,每个类变量都应该有一个注释,每个方法都应该有一个接口注释。 偶尔,某个变量或方法的声明是如此明显,以至于没法向注释中添加任何有用的东西(getter 和 setter 有时就属于这种情况),但这种情况很少; 与其花精力担心是否需要注释,不如对所有内容进行注释。实现注释通常是不必要的(见下文第13.6节)。跨模块的注释是最罕见的,而且写起来也很麻烦,但在需要用到的时候,它们是相当重要的;第13.7节更详细地讨论了它们。
Last updated