编写 Kotlin 代码文档
用来编写 Kotlin 代码文档的语言(相当于 Java 的 JavaDoc)称为 KDoc。本质上 KDoc 是将 JavaDoc 的块标签(block tags)语法(扩展为支持 Kotlin 的特定构造)和 Markdown 的内联标记(inline markup)结合在一起。
生成文档
Kotlin 的文档生成工具称为 Dokka。其使用说明请参见 Dokka README。
Dokka 有 Gradle、Maven 和 Ant 的插件,因此你可以将文档生成集成到你的构建过程中。
KDoc 语法
像 JavaDoc 一样,KDoc 注释也以 /**
开头、以 */
结尾。注释的每一行可以以星号开头,该星号不会当作注释内容的一部分。
按惯例来说,文档文本的第一段(到第一行空白行结束)是该元素的总体描述,接下来的注释是详细描述。
每个块标签都以一个新行开始且以 @
字符开头。
以下是使用 KDoc 编写类文档的一个示例:
/**
* 一组*成员*。
*
* 这个类没有有用的逻辑; 它只是一个文档示例。
*
* @param T 这个组中的成员的类型。
* @property name 这个组的名称。
* @constructor 创建一个空组。
*/
class Group<T>(val name: String) {
/**
* 将 [member] 添加到这个组。
* @return 这个组的新大小。
*/
fun add(member: T): Int { …… }
}
块标签
KDoc 目前支持以下块标签(block tags):
@param <名称>
用于函数的值参数或者类、属性或函数的类型参数。 为了更好地将参数名称与描述分开,如果你愿意,可以将参数的名称括在方括号中。因此,以下两种语法是等效的:
@param name 描述。
@param[name] 描述。
@return
用于函数的返回值。
@constructor
用于类的主构造函数。
@receiver
用于扩展函数的接收者。
@property <名称>
用于类中具有指定名称的属性。这个标签可用于在主构造函数中声明的属性,当然直接在属性定义的前面放置 doc 注释会很别扭。
@throws <类>
, @exception <类>
用于方法可能抛出的异常。因为 Kotlin 没有受检异常,所以也没有期望所有可能的异常都写文档,但是当它会为类的用户提供有用的信息时, 仍然可以使用这个标签。
@sample <标识符>
将具有指定限定的名称的函数的主体嵌入到当前元素的文档中, 以显示如何使用该元素的示例。
@see <标识符>
将到指定类或方法的链接添加到文档的另请参见块。
@author
指定要编写文档的元素的作者。
@since
指定要编写文档的元素引入时的软件版本。
@suppress
从生成的文档中排除元素。可用于不是模块的官方 API 的一部分但还是必须在对外可见的元素。
KDoc 不支持
@deprecated
这个标签。作为替代,请使用@Deprecated
注解。
内联标记
对于内联标记,KDoc 使用常规 Markdown 语法,扩展了支持用于链接到代码中其他元素的简写语法。
链接到元素
要链接到另一个元素(类、方法、属性或参数),只需将其名称放在方括号中:
为此目的,请使用方法 [foo]。
如果要为链接指定自定义标签(label),请使用 Markdown 引用样式语法:
为此目的,请使用[这个方法][foo]。
你还可以在链接中使用限定的名称。请注意,与 JavaDoc 不同,限定的名称总是使用点字符来分隔组件,即使在方法名称之前:
使用 [kotlin.reflect.KClass.properties] 来枚举类的属性。
链接中的名称与正写文档的元素内使用该名称使用相同的规则解析。 特别是,这意味着如果你已将名称导入当前文件,那么当你在 KDoc 注释中使用它时, 不需要再对其进行完整限定。
请注意 KDoc 没有用于解析链接中的重载成员的任何语法。 因为 Kotlin 文档生成工具将一个函数的所有重载的文档放在同一页面上,标识一个特定的重载函数并不是链接生效所必需的。
模块和包文档
作为一个整体的模块、以及该模块中的包的文档,由单独的 Markdown 文件提供,
并且使用 -include
命令行参数或 Ant、Maven 和 Gradle 中的相应插件将该文件的路径传递给 Dokka。
在该文件内部,作为一个整体的模块和分开的软件包的文档由相应的一级标题引入
。标题的文本对于模块必须是“Module <模块名>
”,对于包必须是“Package <限定的包名>
”。
以下是该文件的一个示例内容:
# Module kotlin-demo
该模块显示 Dokka 语法的用法。
# Package org.jetbrains.kotlin.demo
包含各种有用的东西。
## 二级标题
这个标题下的文本也是 `org.jetbrains.kotlin.demo` 文档的一部分。
# Package org.jetbrains.kotlin.demo2
另一个包中有用的东西。