Pular para o conteúdo
Skillpedia
Código em geral48 mil · #4280

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/kotlin/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/kotlin/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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 kotlin

Ou 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.md
Conteú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

  1. Coleções e Transformação de Dados
  2. Segurança contra Nulos (Null Safety)
  3. Funções e Lambdas
  4. Classes e Objetos
  5. Coroutines e Flow
  6. Compose UI
  7. 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.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4280
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas