Bienvenue dans ce **Coding Dojo** ciblé sur l'usage de la programmation réactive, en utilisant le projet **RX Java 2**.
RX Java 2 est une librairie implémentant le paradigme de la programmation réactive. Dans ce **Coding Dojo**, vous apprendrez comment utiliser **RX Java 2**, les concepts, les opérateurs and les bonnes pratiques.
## Frameworks
Les frameworks utilisés pour ce coding dojo sont nombreux. Ci-dessous une liste des principaux :
* Java 11
* RX Java 2.2.4
* JUnit 5
* Lombok 1.18.4
* SLF4J
* Logback
* Etc.
## Enoncé
### A. Level 1
Création de flux de données
La classe **Observable** représente un flux de données. Les méthodes **just** ou **fromIterable** crée un flux à partir d'une collection d'objets. Les flux de données sont des chaînes de caractères dans cet exercice.
Si vous ne souscrivez pas au flux, rien ne se passe. La méthode **subscribe** déclare un **observer** consommant les données passées dans le flux. La souscription déclenche les étapes de traitement du flux.
### B. Level 2
Anatomie d'un flux de données (**stream**)
Un **Stream** est une séquence de données, potentiellement non limitée. Ces données peuvent être connues ou inconnues à sa création. Les flux sont des constructions asynchrones. Lorsque vous observez un flux, vous ne savez pas quand les données vont être émises.
Un **Observer** peut recevoir 3 types d'événements notifié par l'un des 3 méthodes suivantes:
-**onNext**: notifie à chaque fois qu'un élément est passé dans le flux
-**onComplete**: notifie la fin du flux. `onNext ne sera plus appelé
- **onError**: notifie qu'une erreur est arrivée. Le flux n'émettra plus d'éléments, **onComplete** n'est pas appelé.
RxJava met à disposition 3 méthodes à la disposition lors de la souscription.
- notifie les éléments : `stream.subscribe(item -> {});`
- notifie la fin du flux : `stream.subscribe(item -> {}, error -> {}, () -> {});`
### C. Level 3
Cold Stream vs HotStream.
Nous allons aborder un concept clé dans la programmation. Il s'agit des flux qui peuvent-être froid (**Cold Stream**) ou chaud (**HotStream**).
Un **Cold Stream** recommence au début du flux pour chaque consommateur (**subscriber/observer**). Chaque consommateur obtient la liste complète des éléments.
Contrairement à un **Cold Stream**, un **HotStream** envoie les mêmes éléments à tous les consommateurs. Si un consommateur souscrit après le début de l'émission du flux, il ne receverra pas les éléments précédement émis.