kotlin-patterns
Ajuda seu agente a escrever código Kotlin seguindo as melhores práticas. Garante que o código seja robusto, eficiente e fácil de manter, usando recursos modernos da linguagem.
O que ela faz
Esta ferramenta ajuda a escrever código na linguagem de programação Kotlin seguindo as melhores práticas. Ela garante que seu código seja fácil de entender, eficiente e menos propenso a erros.
Quando usar
- ✓Ao escrever código novo em Kotlin.
- ✓Ao revisar o código de outra pessoa.
- ✓Ao organizar ou melhorar código existente.
Exemplo do que pedir para a IA
“Como posso garantir que meu código Kotlin lide corretamente com valores que podem ser nulos?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta verifica se você está usando recursos do Kotlin como 'null safety' (para evitar erros com valores ausentes) e 'immutability' (para tornar os dados mais seguros). Ela também sugere formas mais eficientes de organizar seu código.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill kotlin-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/kotlin-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Desenvolvimento em Kotlin
Padrões idiomáticos e melhores práticas em Kotlin para construir aplicações robustas, eficientes e fáceis de manter.
Quando Usar
- Escrever código Kotlin novo
- Revisar código Kotlin
- Refatorar código Kotlin existente
- Projetar módulos ou bibliotecas Kotlin
- Configurar builds com Gradle Kotlin DSL
Como Funciona
Esta habilidade reforça convenções idiomáticas de Kotlin em sete áreas principais: segurança contra nulos usando o sistema de tipos e operadores de chamada segura, imutabilidade via val e copy() em classes de dados, classes seladas e interfaces para hierarquias de tipos exaustivas, concorrência estruturada com corrotinas e Flow, funções de extensão para adicionar comportamento sem herança, construtores de DSL type-safe usando @DslMarker e receptores de lambda, e Gradle Kotlin DSL para configuração de build.
Exemplos
Segurança contra nulos com operador Elvis:
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user?.email ?: "unknown@example.com"
}
Classe selada para resultados exaustivos:
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>()
}
Concorrência estruturada com 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())
}
Princípios Fundamentais
1. Segurança Contra Nulos
O sistema de tipos do Kotlin distingue tipos anuláveis e não anuláveis. Aproveite-o ao máximo.
// Good: Use non-nullable types by default
fun getUser(id: String): User {
return userRepository.findById(id)
?: throw UserNotFoundException("User $id not found")
}
// Good: Safe calls and Elvis operator
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user?.email ?: "unknown@example.com"
}
// Bad: Force-unwrapping nullable types
fun getUserEmail(userId: String): String {
val user = userRepository.findById(userId)
return user!!.email // Throws NPE if null
}
2. Imutabilidade por Padrão
Prefira val em vez de var, coleções imutáveis em vez de mutáveis.
// Good: Immutable data
data class User(
val id: String,
val name: String,
val email: String,
)
// Good: Transform with copy()
fun updateEmail(user: User, newEmail: String): User =
user.copy(email = newEmail)
// Good: Immutable collections
val users: List<User> = listOf(user1, user2)
val filtered = users.filter { it.email.isNotBlank() }
// Bad: Mutable state
var currentUser: User? = null // Avoid mutable global state
val mutableUsers = mutableListOf<User>() // Avoid unless truly needed
3. Corpos de Expressão e Funções de Expressão Única
Use corpos de expressão para funções concisas e legíveis.
// Good: 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('@') }
// Good: When as expression
fun statusMessage(code: Int): String = when (code) {
200 -> "OK"
404 -> "Not Found"
500 -> "Internal Server Error"
else -> "Unknown status: $code"
}
// Bad: Unnecessary block body
fun isAdult(age: Int): Boolean {
return age >= 18
}
4. Classes de Dados para Objetos de Valor
Use classes de dados para tipos que primariamente contêm dados.
// Good: Data class with copy, equals, hashCode, toString
data class CreateUserRequest(
val name: String,
val email: String,
val role: Role = Role.USER,
)
// Good: Value class for type safety (zero overhead at runtime)
@JvmInline
value class UserId(val value: String) {
init {
require(value.isNotBlank()) { "UserId cannot be blank" }
}
}
@JvmInline
value class Email(val value: String) {
init {
require('@' in value) { "Invalid email: $value" }
}
}
fun getUser(id: UserId): User = userRepository.findById(id)
Classes e Interfaces Seladas
Modelando Hierarquias Restritas
// Bom: Classe selada para when exaustivo
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Failure(val error: AppError) : Result<Nothing>()
…
Perguntas frequentes
O que é 'null safety'?
É uma forma que o Kotlin tem de garantir que você não terá erros inesperados quando um valor deveria existir, mas não existe (é nulo).
O que é 'immutability'?
Significa que os dados, uma vez criados, não podem ser alterados. Isso torna o código mais previsível e seguro.
O que são 'data classes'?
São um tipo especial de classe no Kotlin que serve para guardar dados de forma simples e organizada, gerando automaticamente funções úteis como comparação e exibição.
Detalhes
Descrição original do autor
Idiomatic Kotlin patterns, best practices, and conventions for building robust, efficient, and maintainable Kotlin applications with coroutines, null safety, and DSL builders. Use when writing or reviewing Kotlin code and idiomatic structure or null safety is in question.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #71
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail