Введение: Зачем нужна качественная документация для Kotlin проектов?
Kotlin — современный, лаконичный и выразительный язык программирования, который активно используется для разработки Android-приложений, серверных решений и кроссплатформенных проектов. Однако даже самый элегантный код становится бесполезным, если разработчики не могут понять, как его использовать. Качественная документация — это мост между автором кода и его пользователями. Она ускоряет онбординг новых участников команды, снижает количество ошибок и повышает общую продуктивность.
В этой статье мы разберем, как правильно писать документацию для Kotlin проектов, используя встроенные инструменты, такие как KDoc, и лучшие практики документирования. Вы узнаете, как структурировать комментарии, описывать классы и функции, а также генерировать профессиональную документацию с помощью Dokka.
Основы документирования в Kotlin: KDoc и его синтаксис
Kotlin использует собственный формат документации — KDoc, который очень похож на JavaDoc, но адаптирован под возможности языка. KDoc поддерживает Markdown для форматирования текста, что делает документацию более читаемой.
Синтаксис KDoc
Комментарии KDoc начинаются с /** и заканчиваются на */. Основные элементы:
- Описание — первый абзац после открывающего тега.
- Теги —
@param,@return,@throws,@see,@propertyи другие. - Markdown — поддерживает списки, ссылки, код и жирный текст.
Пример базового KDoc
/**
* Вычисляет факториал заданного числа.
*
* Использует итеративный подход для избежания переполнения стека.
*
* @param n Неотрицательное целое число.
* @return Факториал числа n.
* @throws IllegalArgumentException если n < 0.
* @see Math
*/
fun factorial(n: Int): Long {
require(n >= 0) { "n must be non-negative" }
var result = 1L
for (i in 2..n) {
result *= i
}
return result
}
В этом примере мы используем @param для описания аргумента, @return для возвращаемого значения и @throws для исключения. Markdown позволяет выделить ключевые слова и добавить ссылки.
Документирование различных компонентов Kotlin
Каждый элемент Kotlin требует своего подхода к документированию. Рассмотрим основные случаи: классы, функции, свойства и расширения.
Документирование классов и интерфейсов
Для классов важно описать их назначение, использование и примеры. Используйте тег @property для документирования свойств класса.
/**
* Представляет пользователя системы.
*
* Пример использования:
* ```
* val user = User("john_doe", "john@example.com")
* println(user.displayName)
* ```
*
* @property username Уникальное имя пользователя.
* @property email Адрес электронной почты.
* @constructor Создает нового пользователя с заданными параметрами.
*/
data class User(
val username: String,
val email: String
) {
/**
* Возвращает отображаемое имя пользователя.
*/
val displayName: String
get() = "$username ($email)"
}
Документирование функций-расширений
Расширения — одна из сильных сторон Kotlin. Документируйте их так же, как обычные функции, но укажите, к какому типу они применяются.
/**
* Проверяет, является ли строка валидным email-адресом.
*
* @receiver String, которую необходимо проверить.
* @return `true`, если строка соответствует формату email, иначе `false`.
*/
fun String.isValidEmail(): Boolean {
return this.matches(Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"))
}
Документирование sealed-классов и enum
Для sealed-классов и enum важно описать каждый вариант.
/**
* Представляет результат операции.
*/
sealed class Result {
/**
* Успешный результат с данными.
* @param T Тип данных.
* @property data Данные результата.
*/
data class Success<T>(val data: T) : Result()
/**
* Ошибка выполнения.
* @property message Сообщение об ошибке.
* @property cause Исключение, вызвавшее ошибку (опционально).
*/
data class Error(val message: String, val cause: Throwable? = null) : Result()
}
Генерация документации с помощью Dokka
Dokka — это официальный инструмент для генерации документации Kotlin. Он поддерживает KDoc, JavaDoc и может создавать документацию в форматах HTML, Markdown, Javadoc и даже PDF.
Настройка Dokka в Gradle
Добавьте плагин Dokka в ваш build.gradle.kts:
plugins {
id("org.jetbrains.dokka") version "1.9.20"
}
tasks.dokkaHtml {
outputDirectory.set(file("build/dokka"))
}
Затем выполните команду:
./gradlew dokkaHtml
Dokka сгенерирует HTML-документацию в папке build/dokka. Вы также можете настроить дополнительные параметры, такие как:
- Модули — объединение документации из нескольких модулей.
- Плагины — например,
dokka-androidдля Android-проектов. - Кастомизация — собственные CSS-стили и шаблоны.
Пример расширенной конфигурации
tasks.dokkaHtml {
moduleName.set("My Kotlin Library")
includes.from("README.md")
dokkaSourceSets {
named("main") {
sourceLink {
localDirectory.set(file("src/main/kotlin"))
remoteUrl.set(URL("https://github.com/user/repo/tree/main/src/main/kotlin"))
}
}
}
}
Эта конфигурация добавляет ссылки на исходный код в GitHub, что очень удобно для пользователей.
Лучшие практики документирования Kotlin проектов
Чтобы документация была действительно полезной, следуйте этим рекомендациям:
1. Пишите документацию для людей, а не для машин
Избегайте очевидных комментариев. Вместо // Увеличиваем