kotlin
Faz seu agente escrever código Kotlin limpo e moderno. É excelente para desenvolvimento Android e aplicações backend.
O que ela faz
Este guia ensina como escrever código Kotlin de forma mais eficiente e clara, seguindo as melhores práticas. Ele mostra como usar recursos da linguagem para simplificar tarefas comuns de programação.
Quando usar
- ✓Ao aprender a programar em Kotlin.
- ✓Ao revisar ou melhorar código Kotlin existente.
- ✓Ao querer escrever código mais conciso e legível.
Exemplo do que pedir para a IA
“Como posso tornar este código Kotlin mais limpo usando funções de escopo?”
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
O guia compara exemplos de código 'ruim' com exemplos 'bons' para ilustrar as melhores práticas. Ele foca em usar as ferramentas que o Kotlin oferece para evitar código repetitivo ou complicado.
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 sickn33/agentic-awesome-skills --skill kotlinOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/super-code/kotlin/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.
Kotlin + Compose: Referência de Eficiência Idiomática
Quando Usar
- Use esta habilidade quando a tarefa corresponder a esta descrição: Diretrizes de supercódigo específicas da linguagem para Kotlin.
Sumário
- Coleções e Transformação de Dados
- Segurança contra Nulos (Null Safety)
- Funções e Lambdas
- Classes e Objetos
- Coroutines e Flow
- Compose UI
- Antipadrões específicos de Kotlin
1. Coleções e Transformação de Dados {#collections}
Prefira funções de escopo e transformações da biblioteca padrão em vez de loops imperativos.
// ❌ Verbose
val result = mutableListOf<String>()
for (item in items) {
if (item.isActive) {
result.add(item.name.uppercase())
}
}
// ✅ Idiomatic
val result = items.filter { it.isActive }.map { it.name.uppercase() }
// ❌ Manual grouping
val map = mutableMapOf<String, MutableList<Item>>()
for (item in items) {
map.getOrPut(item.category) { mutableListOf() }.add(item)
}
// ✅
val map = items.groupBy { it.category }
// ❌ Manual fold
var total = 0
for (order in orders) total += order.amount
// ✅
val total = orders.sumOf { it.amount }
Use associate, associateBy, partition, flatMap, zip em vez de equivalentes manuais.
2. Segurança contra Nulos (Null Safety) {#null-safety}
// ❌ Unnecessary null check when Elvis suffices
val name: String
if (user?.name != null) {
name = user.name
} else {
name = "Guest"
}
// ✅
val name = user?.name ?: "Guest"
// ❌ Double null check
if (response != null && response.body != null) {
process(response.body!!)
}
// ✅
response?.body?.let { process(it) }
// ❌ !! without guard
val value = nullable!!.doSomething()
// ✅ Make the non-null contract explicit at the boundary
val value = requireNotNull(nullable) { "nullable must be set before calling X" }.doSomething()
// Or return early:
val n = nullable ?: return
3. Funções e Lambdas {#functions}
// ❌ Single-expression function with unnecessary block body
fun double(x: Int): Int {
return x * 2
}
// ✅
fun double(x: Int) = x * 2
// ❌ Lambda capturing unused parameter
items.forEach { item -> doSomething() }
// ✅
items.forEach { doSomething() }
// ❌ Redundant with/apply nesting
val builder = Builder()
builder.setName("x")
builder.setAge(1)
val result = builder.build()
// ✅
val result = Builder().apply {
setName("x")
setAge(1)
}.build()
Prefira let, run, apply, also, with em vez de referências repetidas ao receptor — mas não aninhe mais de 2 níveis de profundidade.
4. Classes e Objetos {#classes}
// ❌ Mutable class for immutable data
class Point {
var x: Int = 0
var y: Int = 0
}
// ✅
data class Point(val x: Int, val y: Int)
// ❌ Companion object just to hold a constant
class Foo {
companion object {
val TAG = "Foo"
}
}
// ✅ — top-level if only used in this file
private const val TAG = "Foo"
class Foo
// ❌ Enum with when that has to be updated in two places
enum class Status { ACTIVE, INACTIVE }
fun label(s: Status) = when(s) { Status.ACTIVE -> "Active"; Status.INACTIVE -> "Inactive" }
// ✅ — put display logic on the enum itself
enum class Status(val label: String) { ACTIVE("Active"), INACTIVE("Inactive") }
Classes/interfaces seladas em vez de enum quando as variantes carregam dados diferentes.
5. Coroutines e Flow {#coroutines}
// ❌ Unnecessary async/await pair when result is used immediately
val result = async { fetchData() }.await()
// ✅
val result = fetchData() // just suspend fun, no async needed
// ❌ Collecting in a loop
while (true) {
val value = channel.receive()
process(value)
}
// ✅
channel.consumeEach { process(it) }
// or for Flow:
flow.collect { process(it) }
// ❌ StateFlow + manual emit boilerplate
private val _state = MutableStateFlow(initial)
val state: StateFlow<State> = _state
// ... in many places: _state.value = newValue
// ✅ — use update{} for atomic mutation
_state.update { it.copy(field = newValue) }
Não inicie coroutines em construtores ou blocos init. Não use GlobalScope.
6. Compose UI {#compose}
// ❌ remember desnecessário para estado derivado que é barato de computar
val displayName = remember { user.firstName + " " + user.lastName }
…
Perguntas frequentes
O que são 'funções de escopo'?
São funções especiais do Kotlin (como `let`, `run`, `apply`) que ajudam a executar blocos de código em um objeto, tornando o código mais legível.
O que é 'Null Safety'?
É um recurso do Kotlin que ajuda a evitar erros comuns causados por variáveis que deveriam ter um valor, mas estão vazias (nulas). O guia mostra como lidar com isso de forma segura.
O que são 'Coroutines'?
São uma forma de lidar com tarefas que levam tempo (como buscar dados da internet) sem travar o aplicativo. O guia sugere maneiras eficientes de usá-las.
Detalhes
Descrição original do autor
Language-specific super-code guidelines for kotlin.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #4280
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC