[Conceito] - Reactive Programming
Published: 2022-07-03 02:49:16

> Conteúdo original [nessa thread do Twitter](https://twitter.com/zanfranceschi/status/1543424310634614785)

---

Ei dev,

Já ouviu falar sobre REACTIVE PROGRAMMING? Se você já trabalhou com callbacks, eventos, botou cropped, programação assíncrona, provavelmente vai ser bem fácil pra você entender. 

Cola aí pra gente trocar uma ideia sobre esse paradigma.

cc @sseraphini
 
↓

![img](https://pbs.twimg.com/media/FWtYOtKUsAA8Tax?format=jpg&name=small)

---

É importante ressaltar que REACTIVE PROGRAMMING e REACTIVE SYSTEMS são dois conceitos diferentes, apesar de haver intersecções. Ah, e FUNCTIONAL REACTIVE PROGRAMMING é ainda outra coisa. Vamos focar em REACTIVE PROGRAMMING, ok? Bora lá, então!

---

REACTIVE PROGRAMMING tem a ver com fluxo de dados e propagação de mudanças (Wikipedia fala isso) e algo reagindo a todas essas coisas. Uma definição que você vai ver por aí frequentemente é "um evento acontece num lugar e reflete em outro". Mas e o que isso significa?

---

Vamos começar com um exemplo, depois a gente fala umas coisas mais bonitas pra vc abafar nas rodas de conversa.

Imagine uma aplicação tipo o Slack, Teams, etc. Dá pra perceber que o avatar da moça está em 3 lugares.

![img](https://pbs.twimg.com/media/FWtYPU3UIAAVFVw?format=png&name=small)

---

Vamos pensar que o avatar maior é onde vc também edita sua fotinho, blz?

Bom, quando ela editou, dá pra ver que trocou em todos os outros lugares ─ nas áreas "Recent" e no chat.

![img](https://pbs.twimg.com/media/FWtYPuqUsAAcVe5?format=png&name=360x360)

![img](https://pbs.twimg.com/media/FWtYP95VUAIK7dj?format=png&name=small)

---

Vamos então pensar que o avatar principal é uma fonte/fluxo de eventos. Toda vez que é editado, emite um evento avisando sobre isso. As outras coisas estão OBSERVANDO essa fonte de dados, esse fluxo de mudanças.

---

Aí é que está o cerne do paradigma: essas outras coisas (chat e "Recent") REAGEM a essas mudanças! Não tem muito mais além disso! Sério

Mas vamos lá... vamos falar umas coisas bonitas (lembra?).

---

Esse paradigma é um modelo assíncrono e por isso é tão usado e discutido em cima de interfaces com o usuário. Sendo assíncrono, evita aquele congelamento de tela quando tudo é feito na thread principal, manja? (Tenta fazer uma chamada HTTP na mesma thread que renderiza telas).

---

Apesar de 90% dos posts sobre REACTIVE PROGRAMMING usarem exemplos com interfaces gráficas, ele não se limita apenas a isso. Você pode usá-lo com IoT, daemons, etc.
P.ex: imagine um sensor emitindo um fluxo de mudanças de temperatura e outros componentes reagindo a isso.

---

Talvez você tenha percebido que esse paradigma se parece muito com o padrão OBSERVER do Gang of Four. Pois é, parece mesmo.

---

Ah, lembrei dum exemplo clássico de REACTIVE PROGRAMMING: Excel! Você faz uma fórmula e a célula dessa fórmula simplesmente atualiza visualmente o resultado quando outra célula muda. É, o bom e velho Excel...

---

REACTIVE PROGRAMMING é um dos paradigmas que pessoalmente acho mais fácil na prática do que na teoria. Confia em mim, não é um paradigma complexo e difícil. Aposto e ganho que você entenderia ele super facilmente se fizesse um "hello world".

---

Por falar em "hello world", que remete à prática, existe uma biblioteca chamada ReactiveX implementada em vááááárias linguagens que vai te facilitar a vida com RP e eu te aconselho fortemente a usá-la. Não reinventa a roda.

https://reactivex.io

---

ReactiveX gira em torno basicamente de:

- OBSERVABLE
Fonte geradora do fluxo que emite os eventos de forma assíncrona.

- OBSERVERS
Coisas interessadas nesse fluxo que irão reagir às mudanças nele contidas.

---

Bom, era isso que tinha pra falar sobre REACTIVE PROGRAMMING.

Dá um abraço aqui se você leu até aqui ó 🫂 💕 (tô precisando de abraços ultimamente.)

E obrigado à @_andcecilia pela dica do tema! Um abraço especial pra você, amiga! 🥰