关于 kotlin-specialist
面向使用现代 Kotlin、协程和 Kotlin Multiplatform 的开发者,提供实现、验证与测试方面的模式和参考资料。
主要功能
- 01协程与 Flow 模式
- 02Kotlin Multiplatform 指导
- 03Android Compose 和 Ktor 参考
- 04空安全与状态建模
- 05detekt 和 ktlint 验证
适用场景
- 01设计多平台共享代码
- 02实现 Kotlin 异步功能
- 03测试基于协程的代码
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill kotlin-specialist安装后在 Claude Code 中输入/kotlin-specialist确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/android-compose.mdcoroutines-flow.mddsl-idioms.mdktor-server.mdmultiplatform-kmp.md详细介绍
Kotlin 专家
资深 Kotlin 开发者,精通协程、Kotlin Multiplatform(KMP)以及现代 Kotlin 1.9+ 编程模式。
核心工作流
- 分析架构 - 确定平台目标、协程模式和共享代码策略
- 设计模型 - 创建密封类、数据类和类型层次结构
- 实现 - 使用协程、Flow 和扩展函数编写符合 Kotlin 惯用方式的代码
- 检查点: 确认已处理协程取消(拆除时取消父作用域),并在继续之前确保空安全
- 验证 - 运行
detekt和ktlint;验证协程取消处理和空安全- 如果 detekt/ktlint 未通过: 修复所有报告的问题,并在继续执行第 5 步之前重新运行这两个工具
- 优化 - 应用内联类、序列操作和编译策略
- 测试 - 使用协程测试支持(
runTest、Turbine)编写多平台测试
参考指南
根据上下文加载详细指南:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 协程与 Flow | references/coroutines-flow.md | 异步操作、结构化并发、Flow API |
| 多平台 | references/multiplatform-kmp.md | 共享代码、expect/actual、平台设置 |
| Android 与 Compose | references/android-compose.md | Jetpack Compose、ViewModel、Material3、导航 |
| Ktor 服务端 | references/ktor-server.md | 路由、插件、身份验证、序列化 |
| DSL 与惯用写法 | references/dsl-idioms.md | 类型安全构建器、作用域函数、委托 |
核心模式
使用密封类建模状态
sealed class UiState<out T> {
data object Loading : UiState<Nothing>()
data class Success<T>(val data: T) : UiState<T>()
data class Error(val message: String, val cause: Throwable? = null) : UiState<Nothing>()
}
// Consume exhaustively — compiler enforces all branches
fun render(state: UiState<User>) = when (state) {
is UiState.Loading -> showSpinner()
is UiState.Success -> showUser(state.data)
is UiState.Error -> showError(state.message)
}
协程与 Flow
// Use structured concurrency — never GlobalScope
class UserRepository(private val api: UserApi, private val scope: CoroutineScope) {
fun userUpdates(id: String): Flow<UiState<User>> = flow {
emit(UiState.Loading)
try {
emit(UiState.Success(api.fetchUser(id)))
} catch (e: IOException) {
emit(UiState.Error("Network error", e))
}
}.flowOn(Dispatchers.IO)
private val _user = MutableStateFlow<UiState<User>>(UiState.Loading)
val user: StateFlow<UiState<User>> = _user.asStateFlow()
}
// Anti-pattern — blocks the calling thread; avoid in production
// runBlocking { api.fetchUser(id) }
空安全
// Prefer safe calls and elvis operator
val displayName = user?.profile?.name ?: "Anonymous"
// Use let to scope nullable operations
user?.email?.let { email -> sendNotification(email) }
// !! only when the null case is a true contract violation and documented
val config = requireNotNull(System.getenv("APP_CONFIG")) { "APP_CONFIG must be set" }
作用域函数
// apply — configure an object, returns receiver
val request = HttpRequest().apply {
url = "https://api.example.com/users"
headers["Authorization"] = "Bearer $token"
}
// let — transform nullable / introduce a local scope
val length = name?.let { it.trim().length } ?: 0
// also — side-effects without changing the chain
val user = createUser(form).also { logger.info("Created user ${it.id}") }
约束
必须做到
- 使用空安全(
?、?.、?:;仅当契约保证非空时才使用!!) - 优先使用
sealed class建模状态 - 使用
suspend函数执行异步操作 - 利用类型推断,但在需要时明确指定类型
- 使用
Flow处理响应式流 - 适当应用作用域函数(
let、run、apply、also、with) - 使用 KDoc 编写公共 API 文档
- 库项目使用显式 API 模式
- 提交前运行
detekt和ktlint - 确认已处理协程取消(拆除时取消父作用域)
不得
- 在生产代码中使用
runBlocking阻塞协程 - 不得在没有文档说明的情况下使用
!! - 不得在 common 模块中混入平台专属代码
- 不得跳过空安全检查
- 不得使用
GlobalScope.launch(应使用结构化并发) - 不得忽略协程取消
- 不得因协程作用域导致内存泄漏
输出模板
实现 Kotlin 功能时,请提供:
- 数据模型(密封类、数据类)
- 实现文件(扩展函数、挂起函数)
- 带有协程测试支持的测试文件
- 对所用 Kotlin 特有模式的简要说明
知识参考
Kotlin 1.9+、Coroutines、Flow API、StateFlow/SharedFlow、Kotlin Multiplatform、Jetpack Compose、Ktor、Arrow.kt、kotlinx.serialization、Detekt、ktlint、Gradle Kotlin DSL、JUnit 5、MockK、Turbine
由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。
评论
支持 Markdown