Por que eu devo ler este artigo:Programação reativa, em suma, é o paradigma de programação que lida com a contínua mudança de mensagens e suas notificações. Este, por sua vez, permite que o desenvolvedor enfrente menos problemas ao lidar com sistemas de mensageria de alta velocidade que manipulam diversos tipos de mensagens de um jeito completamente novo. Programação reativa significa escrever funções que transformem mensagens. Neste artigo, veremos seus principais âmbitos, conceitos, o manifesto reativo, bem como as formas como a Microsoft abraça o mundo reativo em suas soluções.

Tomemos por exemplo softwares como o Microsoft Excel ou LibreOffice Calc, ambos são softwares que permitem a escrita de números crus e funções de uma forma matemática ou através de uma linguagem de programação simples para script (VBA). A mágica acontece quando você escreve uma função Excel, como =B1+B2, o que significa que o valor da célula atual será a soma dos dois valores contidos nas células B1 e B2, respectivamente. Essa simples função cria uma subscrição aos eventos das células B1 e B2. Assim, a qualquer momento que você atualize o valor de quaisquer uma das duas células, a função retornará o novo valor. Este é o exemplo mais simples sobre o que é a programação funcional e reativa.

Antigamente, as linguagens de programação eram bem diferentes das que temos hoje em dia. A linguagens de programação da primeira geração eram machine-code somente, isto é, foram feitas para o hardware em si, e para a maioria dos desenvolvedores, programar de tal forma significava criar soluções de hardware como mover jumpers ou switches ou adicionar/remover cabos.

A segunda geração de linguagens de programação foi a linguagem de assembly (como o famoso Assembler). O nome foi relacionado ao estágio de montagem (assembling, em inglês) dessas linguagens em um nível de máquina que podem ser executadas nas pipelines de execução da CPU. Essa geração de linguagens foi a primeira feita com texto, embora tenha sido fortemente acoplada às arquiteturas de hardware.

A terceira geração de linguagens de programação iniciou a era das linguagens baseadas em inglês que foram capazes de executar as especificações do hardware com seu próprio conjunto de instruções, já não combinado com o hardware de baixo nível. Começou a era da reutilização.

Essas linguagens não foram feitas em código executável de CPU real. Os programadores faziam seu trabalho em uma linguagem de programação de alto nível que, após o estágio de compilação, era traduzida para um nível inferior que conseguia entrar no pipeline de execução da CPU. No início da era de programação de alto nível, as linguagens mais difundidas eram o IBM ®Fortran e o COBOL.

As linguagens modernas, como o .NET, Java e C/C++, são todas da mesma geração de seus avós da década de 1950. Obviamente, os idiomas atuais têm características e habilidades aprimoradas, devido ao longo tempo de evolução.

A principal diferenciação entre as linguagens de programação anteriores e as atuais é o paradigma de programação - algo como uma abordagem de programação de metodologia estruturada que altera a forma como um programador cria software.

O mais antigo é o paradigma de programação imperativo. É feito de uma sequência direta de etapas, geralmente numerada de 1 a N, que simplesmente executa de forma direta. Nesses estágios, a capacidade de avançar ou retroceder com comandos, como GoTo, foi definitivamente um recurso divisor de águas, enquanto agora, com paradigmas de programação modernos, aquele paradigma é absolutamente evitado. Ao programar com essa abordagem, uma simples aplicação feita para somar dois valores era uma simples sequência de etapas, ou instruções, que atingiam o objetivo desejado. Vejamos um exemplo claro disso em C# na Listagem 1.

Listagem 1. Exemplo de programa em C# para incremento de valor.

Console.WriteLine("Iniciando execução");
  Console.WriteLine("Escreva o valor inicial:");
   
  var valorInicial = int.Parse(Console.ReadLine());
  REPEAT:
  Console.WriteLine("Escreva o valor final:");
   
  var valorFinal = int.Parse(Console.ReadLine());
  if (valorFinal <= valorInicial)
  {
   Console.WriteLine("O valor final deve ser maior que o valor inicial!");
   goto REPEAT;
  }
   
  // Esse contador representa a distância entre o valorInicial e o valorFinal
  var cont = 0;
   
  // Incrementa o contador até o necessário para chegar no valorFinal
  COUNT:
  if (valorFinal > ++cont + valorInicial)
   goto COUNT;
   
  Console.WriteLine("Você precisa de {0} passos para alcançar o valor {1} a partir 
   do valor {2}", cont, valorFinal, valorInicial);
  Console.WriteLine("END");

Como você pode ver no exemplo, todo o programa é apenas uma lista de etapas em que o ator atual é ao mesmo tempo o computador pedindo algo e o usuário escrevendo alguma resposta no console. O programa não consegue fazer várias coisas ao mesmo tempo, ou o computador imprime uma pergunta para o usuário, ou o usuário entra com um dígito ou algo no teclado para dar ao computador um comando ou dados.

É importante ressaltar que o C# é uma linguagem de programação de propósito geral que suporta paradigmas imperativos, processuais, declarativos, orientados a objetos, orientados a ...

Quer ler esse conteúdo completo? Tenha acesso completo