DEV Community

Cover image for Introdução à Programação Reativa
Vinicius Gomes
Vinicius Gomes

Posted on

Introdução à Programação Reativa

Quando você entra no mundo da programação, há um universo inteiramente novo de métodos e possibilidades de utilização de diferentes linguagens, criação de novos conceitos, o que praticamente obriga o programador a estudar e aprender constantemente. Nesse sentido, é inevitável que você chegue ao ponto de discutir sobre modelos ou paradigmas da programação, não somente entre diferentes abordagens, mas também se a própria abordagem se adequa mais a um conceito ou outro.

Temos grandes discussões, como a utilização de Programação Orientada a Objetos vs. Programação Funcional, Monolitos vs. Arquitetura de Microsserviços, e uma menor, mas que não passa despercebida pelo mundo dev, é se a programação reativa é um modelo ou paradigma da programação. De forma simplificada, um modelo é criado para resolver problemas de forma estruturada e com consistência, seguindo a definição de diferentes padrões e princípios, possibilitando assim o envolvimento de diferentes paradigmas de programação. Um paradigma, por sua vez, generaliza a forma de pensar sobre estruturas, utilizando de técnicas para solucionar problemas de maneira igualmente consistente, mas dentro de suas próprias restrições.

Com a programação reativa, o fato de aparentar estarmos em uma extensão de paradigmas pré-existentes, mas também termos mudanças expressivas no modo de interagir e transformar dados, pode gerar conflitos até nos devs menos criteriosos, e de conflito entendemos bem, rs.

Meme de dois devs resolvendo conflitos de branch com um mata-leão

E então o que seria de fato a programação reativa?

Podemos entender esse conceito com o uso da palavra "reativa", que nos dá a capacidade de enxergar o termo como uma programação baseada em "reação". Mas sobre o que ele reage? Eventos e fluxos de dados assíncronos (streams). Tudo isso faz com que a abordagem seja particularmente boa também em cenários onde programamos com informações em tempo real, ex.: serviços de streaming, sistemas de automação e controle etc.

O que é stream? Um dos exemplos claros é você imaginar sua própria vida. Você não pode sair do ciclo, e ele eventualmente chega a um fim, porém você pode realizar diversas ações de transformação contínua. Se alimentar para crescer, definir um estilo de vida, e utilizar das mais variadas técnicas para efetivar mudanças. Uma stream seria uma versão bem simplificada da vida, sendo uma abordagem técnica para modificar dados e eventos no universo da computação.

Manifesto Reativo

Em 2014, foi publicado um manifesto que descreve particularidades de sistemas para que sejam descritos como reativos. Em sua concepção, devem seguir 4 conceitos:

Responsivo

A resposta sistemática, seguindo o conceito geral de responsividade, deve não somente ser consistente e eficaz, mas também evitar demoras demasiadas na resposta.

Resiliente

Capacidade de recuperação automática de um sistema, e de adequação a falhas. É importante manter a funcionalidade da operação independente de uma quebra, e para isso, há isolamento de possíveis falhas em componentes separados, enquanto que as recuperações de erros são delegadas a outros componentes externos.

Elástico

A ideia de elasticidade vem da maneira que o sistema se comporta perante variações de demanda/carga. O mesmo não deve ter algum tipo de contenção, permitindo que a responsividade do sistema atenda a escalabilidade dos algoritmos, garantindo um bom desempenho em tempo real.

Guiado por mensagem (Message driven)

Significa que não há orientação baseada em threads síncronas, e sim eventos, com comunicação assíncrona entre componentes, trazendo flexibilidade e eficiência.

Principais conceitos

Temos vários conceitos que permeiam o universo da programação reativa, porém dois deles são chaves que contornam a ideia de reatividade.

Diagrama Programação Reativa (Observables e Subscribers)

Observables (Observáveis)

De forma resumida, observables são geradores de streams de eventos, mantendo um fluxo de dados que serão trabalhados pelos inscritos no método. Esse processo facilita a ação de operações simultâneas, visto que não há necessidade de bloqueio no aguardo de eventos.

Subscribers (Assinantes)

Quase como os clientes do método, os assinantes irão se inscrever nas streams de dados para receber eventos, sendo notificados automaticamente pelo observable a cada emissão.

Referências

Top comments (1)

Collapse
 
lucasvini382 profile image
Lucas Oliveira

Fera demais em Vini! Parabéns parceiro