提供地道 Kotlin 设计模式与最佳实践,帮助构建健壮高效且易维护的应用
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "kotlin-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/tr/skills/kotlin-patterns/SKILL.md 2. 保存为 ~/.claude/skills/kotlin-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请审查这段 Kotlin 协程代码,指出不符合结构化并发的地方,并重构为更安全、可取消、易测试的实现。同时解释为何要使用 coroutineScope、supervisorScope 或 Dispatchers。代码如下:…
返回重构后的 Kotlin 协程代码,并附上结构化并发与异常处理的改进说明
我有一组 Kotlin 数据模型和服务函数,经常使用 !! 和可空类型判断。请根据 Kotlin idiomatic 风格重构这些代码,减少空指针风险,并使用 sealed class、require、let、Elvis operator 等更合适的写法。代码如下:…
输出更安全的 Kotlin 空安全重构方案,并说明每种写法如何降低错误率
请帮我为一个配置系统设计 Kotlin DSL Builder,要求语法简洁、类型安全、可扩展,并符合 Kotlin 约定。请给出 DSL API、Builder 实现、使用示例,以及如何避免滥用可变状态。
给出完整的 Kotlin DSL 设计方案,包括示例代码与可维护性建议
Sağlam, verimli ve sürdürülebilir uygulamalar oluşturmak için idiomatic Kotlin kalıpları ve en iyi uygulamalar.
Bu skill yedi temel alanda idiomatic Kotlin konvansiyonlarını uygular: tip sistemi ve safe-call operatörleri kullanarak null safety, val ve data class'larda copy() ile immutability, exhaustive tip hiyerarşileri için sealed class'lar ve interface'ler, coroutine'ler ve Flow ile yapılandırılmış eşzamanlılık, inheritance olmadan davranış eklemek için extension fonksiyonlar, @DslMarker ve lambda receiver'lar kullanarak tip güvenli DSL builder'lar, ve build yapılandırması için Gradle Kotlin DSL.
Elvis operatörü ile null safety:
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user?.email ?: "[email protected]"
}
Exhaustive sonuçlar için sealed class:
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 ile yapılandırılmış eşzamanlılık:
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())
}
Kotlin'in tip sistemi nullable ve non-nullable tipleri ayırır. Tam olarak kullanın.
// İyi: Varsayılan olarak non-nullable tipler kullan
fun getUser(id: String): User {
return userRepository.findById(id)
?: throw UserNotFoundException("User $id not found")
}
// İyi: Safe call'lar ve Elvis operatörü
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user?.email ?: "[email protected]"
}
// Kötü: Nullable tipleri zorla açma
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user!!.email // null ise NPE fırlatır
}
var yerine val tercih edin, mutable koleksiyonlar yerine immutable olanları.
// İyi: Immutable veri
data class User(
val id: String,
val name: String,
val email: String,
)
// İyi: copy() ile dönüştürme
fun updateEmail(user: User, newEmail: String): User =
user.copy(email = newEmail)
// İyi: Immutable koleksiyonlar
val users: List<User> = listOf(user1, user2)
val filtered = users.filter { it.email.isNotBlank() }
// Kötü: Mutable state
var currentUser: User? = null // Mutable global state'ten kaçın
val mutableUsers = mutableListOf<User>() // Gerçekten gerekmedikçe kaçın
Kısa, okunabilir fonksiyonlar için expression body'ler kullanın.
// İyi: Expression body
fun isAdult(age: Int): Boolean = age >= 18
fun formatFullName(first: String, last: String): String =
"$first $last".trim()
fun User.displayName(): String =
name.ifBlank { email.substringBefore('@') }
// İyi: Expression olarak when
fun statusMessage(code: Int): String = when (code) {
200 -> "OK"
404 -> "Not Found"
500 -> "Internal Server Error"
else -> "Unknown status: $code"
}
// Kötü: Gereksiz block body
fun isAdult(age: Int): Boolean {
return age >= 18
}
Öncelikle veri tutan tipler için data class'lar kullanın.
// İyi: copy, equals, hashCode, toString ile data class
data class CreateUserRequest(
val name: String,
val email: String,
val role: Role = Role.USER,
)
…
帮助开发者为代码代理配置性能优化、安全防护与研究优先工作流。
提供数据库迁移、回滚与零停机发布的最佳实践指导,适用于多种 ORM 与 SQL 数据库。
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助你掌握地道 Rust 模式、所有权与并发实践,编写安全高性能应用。
基于 C++ Core Guidelines 编写、审查并重构更安全现代的 C++ 代码。
为 Claude Code 会话提供系统化校验流程,帮助检查结果正确性与质量。
提供地道 Kotlin 模式与最佳实践,帮助构建健壮高效且易维护的应用。
提供惯用 Kotlin 模式与最佳实践,帮助构建稳健高效且易维护的应用
提供地道 Go 设计模式与最佳实践,帮助编写健壮高效且易维护的应用
帮助开发者掌握 Ktor 服务端常用模式、认证依赖注入与测试实践。
帮助开发者快速掌握 Kotlin Ktor 服务端常用架构与测试模式。
提供 Kotlin 测试模式与 TDD 实践,涵盖 MockK、协程测试、性质测试和覆盖率分析。