Hot vs Cold Observables: Uma Explicação Detalhada
Tags: webdev, rxjs, functionalreactiveprogramming
Published: 2023-08-23 02:30:55

# Hot vs Cold Observables: Uma Explicação Detalhada

Os Observables, provenientes da programação reativa, são um conceito fundamental no mundo da programação assíncrona. Com o crescente uso de bibliotecas como o RxJS no desenvolvimento web, entender a diferença entre Observables "quentes" e "frios" é crucial. Neste post, vamos explorar as diferenças entre Hot e Cold Observables e ver como e quando usá-los.

## 1. O que são Observables?

Antes de entrar na diferença entre Hot e Cold, vamos entender o que são Observables. Em termos simples, um Observable é um produtor de múltiplos valores que podem ser observados. Em comparação, uma Promise é uma produtora de um único valor. Os Observables podem emitir zero, um ou muitos valores ao longo do tempo.

## 2. Cold Observables

Um Observable "frio" é aquele que cria e inicia a produção de dados quando é subscrito. Portanto, os dados são "produzidos" por pedido. Isso significa que para cada novo observador que se inscreve, a produção de dados começa do início.

**Características principais:**
- Uma nova instância de produção de dados é criada para cada subscrição.
- Os valores emitidos podem ser diferentes para cada observador.
- Eles são comparáveis a funções: cada vez que você chama uma função, ela executa de novo com novas variáveis locais.

**Exemplo:**  
Imagine que você tenha um Observable que faça um pedido HTTP. Para cada nova subscrição, um novo pedido HTTP seria feito.

## 3. Hot Observables

Um Observable "quente" é aquele que começa a produzir dados independentemente de ter qualquer subscrição. Assim que um observador se inscreve, ele recebe os dados a partir do ponto atual e não desde o início da produção de dados.

**Características principais:**
- Os dados são produzidos independentemente das subscrições.
- Todos os observadores compartilham a mesma instância de produção de dados.
- Eles são comparáveis a eventos: vários ouvintes podem ouvir o mesmo evento ao mesmo tempo.

**Exemplo:**  
Um exemplo comum de um Observable quente seria um evento de clique de mouse. O evento acontece independentemente de alguém estar ouvindo, e se dois observadores estiverem ouvindo, ambos verão o mesmo evento de clique.

## 4. Como transformar um Cold Observable em Hot?

Há várias maneiras de transformar um Observable frio em quente, e uma delas é usando operadores como `share` no RxJS. Ao compartilhar uma subscrição entre múltiplos observadores, você pode fazer um Observable frio agir como um quente.

## 5. Quando usar cada tipo?

- **Cold Observables:** São úteis quando você deseja ter uma nova instância de produção de dados para cada consumidor. Isso é comum em cenários onde os dados podem mudar entre os pedidos, como solicitações HTTP.
- **Hot Observables:** São ideais quando você tem uma única fonte de dados que vários observadores querem compartilhar, como eventos de usuário ou um WebSocket.

## Conclusão

A diferença entre Hot e Cold Observables pode parecer sutil, mas é fundamental para o comportamento da sua aplicação. Saber quando e como usar cada tipo pode fazer a diferença entre uma aplicação eficiente e uma que está constantemente repetindo trabalho desnecessário. Ao trabalhar com programação reativa, invista um tempo para compreender estes conceitos, pois eles são a espinha dorsal de muitas interações assíncronas modernas.