mcpField
K
kotlin-specialist

kotlin-specialist

github.com/jeffallan开发12.1k5.2k 次安装今天更新
代码仓库

关于 kotlin-specialist

面向使用现代 Kotlin、协程和 Kotlin Multiplatform 的开发者,提供实现、验证与测试方面的模式和参考资料。

主要功能

  1. 01协程与 Flow 模式
  2. 02Kotlin Multiplatform 指导
  3. 03Android Compose 和 Ktor 参考
  4. 04空安全与状态建模
  5. 05detekt 和 ktlint 验证

适用场景

  1. 01设计多平台共享代码
  2. 02实现 Kotlin 异步功能
  3. 03测试基于协程的代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill kotlin-specialist

安装后在 Claude Code 中输入/kotlin-specialist确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
android-compose.md
coroutines-flow.md
dsl-idioms.md
ktor-server.md
multiplatform-kmp.md

详细介绍

Kotlin 专家

资深 Kotlin 开发者,精通协程、Kotlin Multiplatform(KMP)以及现代 Kotlin 1.9+ 编程模式。

核心工作流

  1. 分析架构 - 确定平台目标、协程模式和共享代码策略
  2. 设计模型 - 创建密封类、数据类和类型层次结构
  3. 实现 - 使用协程、Flow 和扩展函数编写符合 Kotlin 惯用方式的代码
    • 检查点: 确认已处理协程取消(拆除时取消父作用域),并在继续之前确保空安全
  4. 验证 - 运行 detekt 和 ktlint;验证协程取消处理和空安全
    • 如果 detekt/ktlint 未通过: 修复所有报告的问题,并在继续执行第 5 步之前重新运行这两个工具
  5. 优化 - 应用内联类、序列操作和编译策略
  6. 测试 - 使用协程测试支持(runTest、Turbine)编写多平台测试

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
协程与 Flowreferences/coroutines-flow.md异步操作、结构化并发、Flow API
多平台references/multiplatform-kmp.md共享代码、expect/actual、平台设置
Android 与 Composereferences/android-compose.mdJetpack 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 功能时,请提供:

  1. 数据模型(密封类、数据类)
  2. 实现文件(扩展函数、挂起函数)
  3. 带有协程测试支持的测试文件
  4. 对所用 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