RxDart — Introdução
O desenvolvimento de aplicações, não importa de que plataforma sejam segue alguns padrões e regras e também algumas convenções!
Desenvolver aplicações em Dart não seria diferente e neste artigo irei dar uma breve introdução do que vem a ser o RxDart e como ajuda no desenvolvimento de aplicações mais robustas com um código mais leve e com melhor performance.
Como referencia terei o desenvolvimento de aplicações móveis com recurso a Flutter.
Irei desenvolver nesta série de dois artigos o RxDart, sendo:
- RxDart — Introdução (este artigo)
- RxDart — Implementando o RxDart
Programação Reactiva
Não podemos correr pra falar de RxDart sem antes entender o que é Programação reactiva e o que significa o Rx, e é o que iremos tratar neste e nos tópicos que se seguem, então não precisa ficar assustado com tantas expressões esquisitas, caso não esteja familiarizado ainda.
Programação reactiva é um paradigma de programação que consiste em responder as várias mudanças de valores das variáveis de forma assíncrona, ou seja, a verificação e validação dos dados da aplicação ocorre em módulos e não todos quando a aplicação inicia. É baseada em streams.
Isso permite que não haja necessidade de definir um único fluxo de dados (streams) com que o programa deve correr e de acordo com o resultado de cada mudança se definia uma acção específica!
A programação reactiva é um paradigma que contraria a Programação imperativa, em que o fluxo de dados é definido com dados previamente definidos e estabelecidos, e caso um dos dados não seja lido, a aplicação não tem como responder sem receber todo o conjunto de dados antes.
Podemos exemplificar isso de forma bastante simples, dois casos um que representam a Programação Imperativa e a Reactiva, respectivamente:
a. Imagine que precise fazer uma viagem de carro, e sabemos perfeitamente que para que se faça uma viagem de carro, é necessário que tenhamos o carro com no mínimo quatro rodas, o volante e claro combustível suficiente, caso falte algum destes requisitos, não temos viagem!
b. Agora imagine que precisa fazer essa mesma viagem e o carro não tem os requisitos definidos acima, verificando falta desses requisitos serão definidos novos fluxos de dados como por exemplo arranjar novos pneus, volante ou aumentar o combustível dependendo da situação ou ainda trocar de carro, pois cada evento em Programação é paralelo a outros.
ReactiveX
O reactiveX (Reactive Extensions) é uma biblioteca baseada em eventos e composição assíncrona a partir de Observables (irei abordar mais adiante). Baseia-se como se pode perceber com o termo “assíncrono” na programação reactiva.
O RxDart é a implementação do ReactiveX na linguagem Dart.
O RxDart
O RxDart é uma biblioteca de programação funcional reactiva, baseada na Rx que tem implementações próprias de métodos prontos a serem usados!
Mas o que seria necessário pra implementar o RxDart em minha aplicação Flutter?
Pra quem já tiver iniciado a desenvolver aplicações flutter, já deve saber como iniciar projecto, se não for o seu caso, leia aqui.
Para implementar o RxDart só precisa adicionar a dependência ao ficheiro pubspec no directório de sua aplicação flutter_project>pubspec.yml.
rxdart: 0.20.0
Objectos do RxDart
Implementar o RxDart significa ter a chance de instanciar objectos como:
- Observables
Observables são elementos que permitem emitir notificações a outros chamados observadores (observers) de modo a anunciar a mudança de um certo stream.
A partir dos Observables é possível determinar que tipo de acção lançar.
NB: A documentação do ReactiveX não considera o Observable um objecto como tal, mas sim como um elemento distinto deste paradigma.
- PublishSubjects
O publishSubject permite enviar dados, erros e finalizar eventos quando um listener é activado. Pode ser usado, por exemplo em, buscas em que pra cada letra digitada recebe um novo resultado e mantêm-se os resultados da última palavra registada e são feitas quantas chamadas forem necessárias de acordo com as mudanças do texto que está sendo inserido.
- BehaviorSubject
Permite receber o último item capturado pelo controller pelo tipo de dado e guardar este como o primeiro dado sempre que houver uma alteração o controller é anunciado e o BehaviorSubject pega este dado (apenas o último), apropriado para verificações de passwords ou padrões por exemplo.
- ReplaySubject
Permite receber um conjunto de dados e guardá-los de modo que possa em momento oportuno ler todos eles.
Ao contrário do Observable que só é lançado uma única vez, os outros objectos podem ser lançados múltiplas vezes.
Sintetizando...
O RxDart é uma implementação do Rx que é baseado na programação Reactiva, o que permite termos uma aplicação com busca de resultados assíncrona, ou seja baseada em streams que são fluxos de dados (independentes) e tornam a aplicação mais leve, pois reduz a dependência de resultados entre vários blocos de dados, e reduz chances de ocorrência de erros, casos de tela totalmente branca e melhora ainda a UX.
Espero que tenha aprendido com este artigo e que se tenha divertido enquanto lia.
Obrigado por acompanhar até ao fim e espero por você no próximo artigo.
Para questões e sugestões esteja a vontade para tal nos comentários, email igorlsambo1999@gmail.com ou twitter @lsambo02.
Obrigado e até ao próximo artigo!!!