編寫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](https://github.com/param "@param") <名稱>
用於函數的值參數或者類、屬性或函數的類型參數。
爲了更好地將參數名稱與描述分開,如果你願意,可以將參數的名稱括在
方括號中。因此,以下兩種語法是等效的:
@param name 描述。
@param[name] 描述。
[@return](https://github.com/return "@return")
用於函數的返回值。
[@constructor](https://github.com/constructor "@constructor")
用於類的主構造函數。
[@receiver](https://github.com/receiver "@receiver")
用於擴展函數的接收者。
[@property](https://github.com/property "@property") <名稱>
用於類中具有指定名稱的屬性。這個標籤可用於在
主構造函數中聲明的屬性,當然直接在屬性定義的前面放置 doc 註釋會很
彆扭。
[@throws](https://github.com/throws "@throws") <類>
, [@exception](https://github.com/exception "@exception") <類>
用於方法可能拋出的異常。因爲 Kotlin 沒有受檢異常,所以
也沒有期望所有可能的異常都寫文檔,但是當它會爲類的用戶提供有用的信息時,
仍然可以使用這個標籤。
[@sample](https://github.com/sample "@sample") <標識符>
將具有指定限定的名稱的函數的主體嵌入到當前元素的文檔中,
以顯示如何使用該元素的示例。
[@see](https://github.com/see "@see") <標識符>
將到指定類或方法的鏈接添加到文檔的另請參見塊。
[@author](https://github.com/author "@author")
指定要編寫文檔的元素的作者。
[@since](https://github.com/since "@since")
指定要編寫文檔的元素引入時的軟件版本。
[@suppress](https://github.com/suppress "@suppress")
從生成的文檔中排除元素。可用於不是模塊的官方 API 的一部分
但還是必須在對外可見的元素。
KDoc 不支持
[@deprecated](https://github.com/deprecated "@deprecated")
這個標籤。作爲替代,請使用[@Deprecated](https://github.com/Deprecated "@Deprecated")
註解。
{:.note}
內聯標記
對於內聯標記,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
另一個包中有用的東西。