SuperAPI AI 工具集

kotlin-patterns

编程与开发

查看项目

更新于 10-15 08:37

技能介绍

用途

kotlin-patterns 是一套 Kotlin 惯用模式与最佳实践技能,目标是帮助开发者构建健壮、高效、可维护的 Kotlin 应用。它适用于以下场景:编写新的 Kotlin 代码、审查 Kotlin 代码、重构已有 Kotlin 代码、设计 Kotlin 模块或库,以及配置 Gradle Kotlin DSL 构建。

主要能力

该技能在七个关键领域强制推行惯用 Kotlin 约定:

  1. 空安全:利用类型系统区分可空与非可空类型,使用安全调用操作符和 Elvis 操作符,避免强制解包(!!)。
  2. 默认不可变:优先使用 val 而非 var,优先使用不可变集合,通过 data class 的 copy() 进行转换。
  3. 密封类与密封接口:用于穷尽式类型层级,配合 when 表达式实现完整分支覆盖。
  4. 结构化并发:使用协程与 Flow,包括 coroutineScope、supervisorScope、async/await、取消与清理。
  5. 扩展函数:在不使用继承的情况下添加行为,包括作用域内扩展以避免污染全局命名空间。
  6. 类型安全 DSL 构建器:使用 @DslMarker 与 lambda 接收者构建类型安全的 DSL。
  7. Gradle Kotlin DSL:用于构建配置。

此外还涵盖作用域函数(let、apply、also、run、with)的适用场景、委托(属性委托与接口委托)、序列的惰性求值、错误处理模式(Result 类型、require/check/error)以及集合操作。

使用方式

该技能以模式与示例代码的形式提供指导。资料中给出了大量代码示例,包括:

  • 空安全与 Elvis 操作符:
fun getUserEmail(userId: String): String {
    val user = userRepository.findById(userId)
    return user?.email ?: "unknown@example.com"
}
  • 密封类表示穷尽结果:
sealed class Result<out T> {
    data class Success<T>(val data: T) : Result<T>()
    data class Failure(val error: AppError) : Result<Nothing>()
    data object Loading : Result<Nothing>()
}
  • 结构化并发与 async/await:
suspend fun fetchUserWithPosts(userId: String): UserProfile =
    coroutineScope {
        val user = async { userService.getUser(userId) }
        val posts = async { postService.getUserPosts(userId) }
        UserProfile(user = user.await(), posts = posts.await())
    }
  • Gradle Kotlin DSL 配置示例(build.gradle.kts)中包含插件、依赖与测试配置,例如:
plugins {
    kotlin("jvm") version "2.3.10"
    kotlin("plugin.serialization") version "2.3.10"
    id("io.ktor.plugin") version "3.4.0"
    id("org.jetbrains.kotlinx.kover") version "0.9.7"
    id("io.gitlab.arturbosch.detekt") version "1.23.8"
}

资料还列出了反模式示例,例如嵌套作用域函数难以阅读,建议改为链式安全调用。

适用场景

  • 编写新的 Kotlin 代码时遵循惯用约定。
  • 审查 Kotlin 代码时作为规范参考。
  • 重构已有 Kotlin 代码。
  • 设计 Kotlin 模块或库。
  • 配置 Gradle Kotlin DSL 构建。

限制

资料未提供该技能的安装命令、收费方式、价格、平台支持范围或具体效果数据,这些信息暂未提供。资料中出现的版本号(如 Kotlin 2.3.10、Ktor 3.4.0 等)为示例配置中的版本,不构成对特定版本的强制要求。