Nesse artigo eu procuro esclarecer um pouco sobre essa biblioteca voltada para a programação funcional e que, hoje em dia, tem crescido exponencialmente em termos de adoção.
Então, de que se trata o RxJS?
Bem, como disse antes, o RxJS é uma biblioteca para uso em projetos que utilizam Javascript (incluindo JSX e TypeScript), que faz parte do projeto de Programação Reativa, daí que vem o Rx, de Reactive Extension. Além dela, existem também outros projetos voltados para a linguagem Java, Python, C++, etc.
E para quê serve? Qual sua finalidade?
Nós desenvolvedores, cedo ou tarde, trabalhamos em algum projeto de complexidade sem tamanho e que lida com inúmeras fontes de dados assíncronas, chamadas de Stream. Essas Streams precisam ser tratadas para que sejam mostradas para o usuário, na tela de um Smartphone, por exemplo, e isso demanda muito trabalho pois precisamos verificar informação por informação e mostrar somente o que importa naquele momento.
O RxJS trouxe o conceito de Observable justamente para lidar com Streams e com alto volume de informação, de forma a facilitar esse tratamento, debugs, testes, etc.
Observable Pattern
Para isso, fazemos uso do padrão Observable, ou Observable Pattern, que é formado por:
- Um Observable, que se trata de uma coleção de futuros eventos que podem ser invocados numa determinada situação ou momento;
- Um Observer que sabe ouvir e tratar os valores recebidos pelo Observable;
- Uma Subscription, ela é basicamente a execução de um Observable e também serve para cancelar essa mesma execução;
- Operators, funções puras escritas sob o conceito de linguagem funcional (tratarei dessas funções num futuro próximo) que servem para lidar com coleções utilizando operadores como map, filter, reduce, etc;
- Temos ainda o Subject, equivalente a um EventEmitter e que é a única forma de fazer um multicasting para vários Observers.
- E, por último, Schedulers. Esses servem para lidar com concorrência entre os processos, nos dando a opção de escolher quando as informações serão processadas. Exemplos mais comuns são SetTimeout e RequestAnimationFrame.
Então, em resumo, qualquer tipo de fonte de informação pode ser tratada utilizando-se dessa biblioteca.
Exemplos mais comuns, e os quais eu já utilizei em meus projetos, incluem tratamento de informações vindas de bancos de dados em tempo real. Quem utiliza o AngularFirebase2, a implementação do Firebase utilizada no Angular e Ionic, sabe muito bem da sua utilizada na hora de receber e tratar informações das Collections e com os Subscribers você monitora as mudanças no banco em tempo real.
Mas há também usos em projetos de jogos e animações, por exemplo, já que é necessário 'observar' os comandos de um Joystick, teclado ou mouse. Então pode-se criar um Observable para isso.
Enfim, esse post foi apenas para fazer um resumo de pra quê serve essa biblioteca, mas, em breve, trarei posts práticos de seu uso e talvez tudo fique mais claro.
Valeu!
0 Comentar