<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vinicius Gomes</title>
    <description>The latest articles on DEV Community by Vinicius Gomes (@vinigb).</description>
    <link>https://dev.to/vinigb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1073446%2F397f8703-09ab-4bd4-abb6-7d7a94b37446.jpeg</url>
      <title>DEV Community: Vinicius Gomes</title>
      <link>https://dev.to/vinigb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinigb"/>
    <language>en</language>
    <item>
      <title>Introdução à Programação Reativa</title>
      <dc:creator>Vinicius Gomes</dc:creator>
      <pubDate>Fri, 09 Jun 2023 13:30:20 +0000</pubDate>
      <link>https://dev.to/vinigb/introducao-a-programacao-reativa-4odm</link>
      <guid>https://dev.to/vinigb/introducao-a-programacao-reativa-4odm</guid>
      <description>&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I08_BLCM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kef2fcpnauqe4hi2bua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I08_BLCM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kef2fcpnauqe4hi2bua.png" alt="Meme de dois devs resolvendo conflitos de branch com um mata-leão" width="571" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  E então o que seria de fato a programação reativa?
&lt;/h2&gt;

&lt;p&gt;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 (&lt;strong&gt;streams&lt;/strong&gt;). 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.&lt;/p&gt;

&lt;p&gt;O que é &lt;strong&gt;stream&lt;/strong&gt;? 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Manifesto Reativo&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Responsivo&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Resiliente&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Elástico&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Guiado por mensagem (Message driven)&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Principais conceitos&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B6255gWM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtx1yt3r7zwuw108b9o1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B6255gWM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtx1yt3r7zwuw108b9o1.png" alt="Diagrama Programação Reativa (Observables e Subscribers)" width="594" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Observables (Observáveis)&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;De forma resumida, observables são geradores de &lt;strong&gt;streams&lt;/strong&gt; 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Subscribers (Assinantes)&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Doc ReactiveX (&lt;a href="https://reactivex.io/"&gt;https://reactivex.io/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Flutterando - Programação Reativa (&lt;a href="https://www.youtube.com/watch?v=nArCLxKBd1Q&amp;amp;ab_channel=Flutterando"&gt;https://www.youtube.com/watch?v=nArCLxKBd1Q&amp;amp;ab_channel=Flutterando&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Manifesto Reativo (&lt;a href="https://www.reactivemanifesto.org/pt-BR"&gt;https://www.reactivemanifesto.org/pt-BR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
