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
Mensagem pronta para colar
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-expertOu 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.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 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.IOpara 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
TestScopeerunTestpara 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
CancellationExceptiona 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.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #3398
- 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