RxDart — Introdução

Igor L Sambo💙🇲🇿
GDG Maputo
Published in
5 min readJan 18, 2019

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:

  1. RxDart — Introdução (este artigo)
  2. 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.

https://giphy.com/gifs/lisa-edelstein-phew-KR9OgQyWAwIIE

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?

https://giphy.com/gifs/Bounce-TV-reaction-comedy-l4FsxV1FdNQJMuCuQ

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.

Elementos presentes em uma transformação de Observables

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!!!

--

--