Junior — Middle
Qual é a diferença entre o uso de SharedFlow e StateFlow em fluxos de dados reativos?
sobes.tech IA
Resposta da IA
SharedFlow e StateFlow são tipos de flux da biblioteca Kotlin Coroutines para programação reativa, mas têm objetivos e comportamentos diferentes.
StateFlow:
- Armazena o estado atual (valor), sempre tem o último valor.
- Os assinantes recebem imediatamente o valor atual ao se inscreverem.
- Usado para representar um estado que muda ao longo do tempo.
- Suporta apenas um elemento final.
SharedFlow:
- Por padrão, não armazena estado (embora possa configurar replay).
- Pode transmitir eventos a vários assinantes.
- Usado para eventos ou fluxos de dados onde a entrega a todos os assinantes é importante.
- Permite configurar o buffer e o número de elementos repetidos.
Exemplo:
val stateFlow = MutableStateFlow(0) // sempre armazena o valor atual
val sharedFlow = MutableSharedFlow<Int>() // fluxo de eventos
// StateFlow: o assinante receberá imediatamente o valor atual
stateFlow.value = 1
stateFlow.collect { println(it) } // exibirá 1
// SharedFlow: o assinante receberá apenas novos eventos após a inscrição
sharedFlow.emit(1)
sharedFlow.collect { println(it) } // não exibirá 1, apenas os novos
Resumindo, StateFlow é para estado com o último valor, SharedFlow para eventos e múltiplas inscrições.