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

kotlin-coroutines-expert

Ajuda seu agente a usar padrões avançados para Kotlin Coroutines e Flow. Ele entende como lidar com erros e testar códigos de forma eficiente.

O que ela faz

Este guia ensina como usar 'Coroutines' e 'Flow' em Kotlin, que são ferramentas para fazer várias tarefas ao mesmo tempo sem travar o programa. Ele mostra como organizar essas tarefas, lidar com erros e testar seu código.

Quando usar

  • ✓Ao criar programas em Kotlin que precisam fazer várias coisas ao mesmo tempo.
  • ✓Ao lidar com fluxos de dados que mudam com o tempo.
  • ✓Ao depurar problemas com tarefas que foram canceladas ou deram erro.

Exemplo do que pedir para a IA

“Como posso fazer duas operações de rede ao mesmo tempo em Kotlin e lidar com possíveis erros?”

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/kotlin-coroutines-expert/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/kotlin-coroutines-expert/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa um conceito chamado 'concorrência estruturada' para garantir que as tarefas sejam bem gerenciadas. Você também aprende a usar 'Flow' para lidar com dados que chegam em sequência e a tratar erros de forma organizada.

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-coroutines-expert

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/kotlin-coroutines-expert/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 Coroutines Expert

Visão Geral

Um guia para dominar a programação assíncrona com Kotlin Coroutines. Abrange tópicos avançados como concorrência estruturada, Flow transformações, tratamento de exceções e estratégias de teste.

Quando Usar Esta Habilidade

  • Use ao implementar operações assíncronas em Kotlin.
  • Use ao projetar fluxos de dados reativos com Flow.
  • Use ao depurar cancelamentos ou exceções de coroutines.
  • Use ao escrever testes unitários para funções de suspensão ou Flows.

Guia Passo a Passo

1. Concorrência Estruturada

Sempre inicie coroutines dentro de um CoroutineScope definido. Use coroutineScope ou supervisorScope para agrupar tarefas concorrentes.

suspend fun loadDashboardData(): DashboardData = coroutineScope {
    val userDeferred = async { userRepo.getUser() }
    val settingsDeferred = async { settingsRepo.getSettings() }

    DashboardData(
        user = userDeferred.await(),
        settings = settingsDeferred.await()
    )
}

2. Tratamento de Exceções

Use CoroutineExceptionHandler para escopos de nível superior, mas confie em try-catch dentro de funções de suspensão para controle granular.

val handler = CoroutineExceptionHandler { _, exception ->
    println("Caught $exception")
}

viewModelScope.launch(handler) {
    try {
        riskyOperation()
    } catch (e: IOException) {
        // Handle network error specifically
    }
}

3. Fluxos Reativos com Flow

Use StateFlow para estado que precisa ser retido e SharedFlow para eventos.

// Cold Flow (Lazy)
val searchResults: Flow<List<Item>> = searchQuery
    .debounce(300)
    .flatMapLatest { query -> searchRepo.search(query) }
    .flowOn(Dispatchers.IO)

// Hot Flow (State)
val uiState: StateFlow<UiState> = _uiState.asStateFlow()

Exemplos

Exemplo 1: Execução Paralela com Tratamento de Erros

suspend fun fetchDataWithErrorHandling() = supervisorScope {
    val task1 = async {
        try { api.fetchA() } catch (e: CancellationException) { throw e } catch (e: IOException) { null }
    }
    val task2 = async { api.fetchB() }

    // A child failure does not directly cancel its siblings.
    // But an uncaught exception from await escapes the supervisor block and cancels it.
    val result1 = task1.await()
    val result2 = task2.await() // May throw
}

Melhores Práticas

  • ✅ Faça: Use Dispatchers.IO para operações de I/O bloqueantes.
  • ✅ Faça: Cancele escopos quando eles não forem mais necessários (por exemplo, ViewModel.onCleared).
  • ✅ Faça: Use TestScope e runTest para testes unitários de coroutines.
  • ❌ Não Faça: Use GlobalScope. Isso quebra a concorrência estruturada e pode levar a vazamentos.
  • ❌ Não Faça: Capture CancellationException a menos que você o relance.

Solução de Problemas

Problema: O teste de coroutine fica pendurado ou falha de forma imprevisível. Solução: Certifique-se de estar usando runTest e injetando TestDispatcher em suas classes para que você possa controlar o tempo virtual.

Limitações

  • Use esta habilidade apenas quando a tarefa corresponder claramente ao escopo descrito acima.
  • Não trate a saída como um substituto para validação específica do ambiente, testes ou revisão de especialistas.
  • Pare e peça esclarecimentos se os inputs necessários, permissões, limites de segurança ou critérios de sucesso estiverem faltando.

Exemplos são fragmentos: forneça imports, interfaces de repositório, dependências de ciclo de vida do Android e a versão das coroutines instalada. Trate cada falha aguardada deliberadamente e relance o cancelamento. As escolhas de replay/buffer SharedFlow determinam a entrega enquanto nenhum coletor está ativo; não é uma fila de eventos garantida. StateFlow conflaciona mudanças de estado. Teste o cancelamento e coletores lentos/ausentes, não apenas caminhos felizes. Comportamento oficial de exceção.

Perguntas frequentes

O que é 'concorrência estruturada'?

É uma forma de organizar tarefas que rodam ao mesmo tempo, garantindo que elas sejam iniciadas e paradas de maneira controlada, como se fizessem parte de um grupo.

Qual a diferença entre 'StateFlow' e 'SharedFlow'?

'StateFlow' é usado para guardar o estado atual de algo (como o texto em uma caixa de busca), enquanto 'SharedFlow' é para enviar eventos que podem acontecer (como um clique de botão).

Por que não devo usar 'GlobalScope'?

'GlobalScope' ignora a 'concorrência estruturada', o que pode fazer com que tarefas continuem rodando mesmo quando não deveriam, causando problemas e vazamentos de memória.

Detalhes

Descrição original do autor

Expert patterns for Kotlin Coroutines and Flow, covering structured concurrency, error handling, and testing.

repo: sickn33/agentic-awesome-skills

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas