Jérome Doucet | Romain Niveau
RxJava
Découvrez RxJava, le reactive programming
Pourquoi Rx ?
Origine
Pourquoi Rx
• Reactive programming
• Rx: Reactive Extensions
• Initialement en .NET
• Polyglote
• Extension du pat...
Documentations
Pourquoi Rx
• Documentations très riches
• Basées sur des diagrammes à billes
• Arbre de décision pour trou...
Documentations
Pourquoi Rx
5
Pattern Observer
Pattern initial
Pattern Observer
7
Dans RxJava
Pattern Observer
• Basé sur ce pattern
• Ajout d’opérateurs divers (agrégation, inspections de séquences, …)
•...
Classes principales
Pattern Observer
• Observable
• Observer
• Subscription
• Scheduler
9
3 méthodes principales
Pattern Observer
• OnNext
• Appelée après chaque évènement
• OnError
• Appelée lorsqu’une erreur su...
Exemple d’Observer: classe complète
Pattern Observer
11
Exemple d’Observer: actions rapides
Pattern Observer
12
ConnectableObservable
Pattern Observer
• Cold Observable
• Hot Observable
• Non synchronisé par défaut
• Connect() synchro...
Séquences
Créations
Séquences
• Les séquences sont au coeur de RxJava
• Elles sont toujours créées à l’aide de méthodes statiques
• ...
Créations
Séquences
from()
16
Créations
Séquences
from()
17
Créations
Séquences
create()
18
Créations
Séquences
• Et il en existe pleins d’autres :
• just(), repeat(), repeatWhen(), defer(), range(), interval(),
ti...
Inspection de séquences
Inspection
Séquences
• Les séquences peuvent être inspectées.
• Les méthodes suivantes peuvent être utilisées :
• all(), c...
Agrégation de séquences
Agrégation
Séquences
• RxJava propose des opérateurs d’agrégation courants
• Ils vont permettre de présenter la donnée sou...
Agrégation
Séquences
reduce()
24
Agrégation
Séquences
collect()
25
Agrégation
Séquences
• L’opérateur reduce est aussi présent, ainsi que d’autres
permettant de convertir la séquence en Col...
Backpressure / Gestion d’erreurs
Méthodes filtrantes
Backpressure
• throttleFirst
• throttleLast
• debounce
28
Concepts alternatifs: buffer
Backpressure
29
Concepts alternatifs: window
Backpressure
30
Principes de base
Gestion d’erreurs
• Aucune exception levée hors de l’Observable par défaut
• Si onError lève une excepti...
Principes avancés
Gestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
32
Principes avancés
Gestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
33
Principes avancés
Gestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
34
Combinaison de séquences
Combinaison de séquences
• Répond aux besoins de fusion entre plusieurs sources de
données.
• Permet d’arbitrer des source...
Fusion
Combinaison de séquences
concat()
37
Fusion
Combinaison de séquences
startWith()
38
Concurrence
Combinaison de séquences
amb()
39
Concurrence
Combinaison de séquences
merge()
40
Corrélation
Combinaison de séquences
zip()
41
Concurrency
Scheduler
Concurrency
• Basée sur des Schedulers fourni par RxJava :
• computation()
• from(Executor)
• immediate()
• io()...
Concurrency
subscribeOn() - observeOn()
44
Démo
Conclusion
Conclusion
• Framework uniquement pour la gestion d’évènements
• Ne sert pas à faire des appels asynchrones
• Framework co...
Prochain SlideShare
Chargement dans…5
×

BackDay Xebia : Découvrez RxJava, le reactive programming

1 018 vues

Publié le

RxJava est une des nombreuses implémentations du concept de reactive programming.

Ce concept est une extension du pattern Observer et permet la composition de séquences basées sur des évènements asynchrones. Rx apporte également de nouveaux opérateurs et une approche fonctionnelle du traitement des séquences.

Par Jérome Doucet et Romain Niveau, consultants chez Xebia

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 018
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
13
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

BackDay Xebia : Découvrez RxJava, le reactive programming

  1. 1. Jérome Doucet | Romain Niveau RxJava Découvrez RxJava, le reactive programming
  2. 2. Pourquoi Rx ?
  3. 3. Origine Pourquoi Rx • Reactive programming • Rx: Reactive Extensions • Initialement en .NET • Polyglote • Extension du pattern Observer 3
  4. 4. Documentations Pourquoi Rx • Documentations très riches • Basées sur des diagrammes à billes • Arbre de décision pour trouver les bons opérateurs 4
  5. 5. Documentations Pourquoi Rx 5
  6. 6. Pattern Observer
  7. 7. Pattern initial Pattern Observer 7
  8. 8. Dans RxJava Pattern Observer • Basé sur ce pattern • Ajout d’opérateurs divers (agrégation, inspections de séquences, …) • Ecriture fonctionnelle 8
  9. 9. Classes principales Pattern Observer • Observable • Observer • Subscription • Scheduler 9
  10. 10. 3 méthodes principales Pattern Observer • OnNext • Appelée après chaque évènement • OnError • Appelée lorsqu’une erreur survient • OnCompleted • Appelée à la fin de la séquence 10
  11. 11. Exemple d’Observer: classe complète Pattern Observer 11
  12. 12. Exemple d’Observer: actions rapides Pattern Observer 12
  13. 13. ConnectableObservable Pattern Observer • Cold Observable • Hot Observable • Non synchronisé par défaut • Connect() synchronise les Observers 13
  14. 14. Séquences
  15. 15. Créations Séquences • Les séquences sont au coeur de RxJava • Elles sont toujours créées à l’aide de méthodes statiques • Quelques exemples… 15
  16. 16. Créations Séquences from() 16
  17. 17. Créations Séquences from() 17
  18. 18. Créations Séquences create() 18
  19. 19. Créations Séquences • Et il en existe pleins d’autres : • just(), repeat(), repeatWhen(), defer(), range(), interval(), timer(), empty(), error(), never(). • Une extension (rxjava-async) permet de créer des Observables à partir de fonctions. 19
  20. 20. Inspection de séquences
  21. 21. Inspection Séquences • Les séquences peuvent être inspectées. • Les méthodes suivantes peuvent être utilisées : • all(), contains(), exists(), isEmpty(), sequenceEquals() 21
  22. 22. Agrégation de séquences
  23. 23. Agrégation Séquences • RxJava propose des opérateurs d’agrégation courants • Ils vont permettre de présenter la donnée sous une forme qui va faciliter son exploitation • Ils sont en partie inspirés d’opérateurs fonctionnels. • Quelques exemples… 23
  24. 24. Agrégation Séquences reduce() 24
  25. 25. Agrégation Séquences collect() 25
  26. 26. Agrégation Séquences • L’opérateur reduce est aussi présent, ainsi que d’autres permettant de convertir la séquence en Collections (toList(), toMap(), toSortedList(), …) • Une extension (rxjava-math) permet de faire des agrégations sur des nombres • Deux autres opérateurs permettent de faire des agrégations sur des String uniquement, join() et stringConcat() 26
  27. 27. Backpressure / Gestion d’erreurs
  28. 28. Méthodes filtrantes Backpressure • throttleFirst • throttleLast • debounce 28
  29. 29. Concepts alternatifs: buffer Backpressure 29
  30. 30. Concepts alternatifs: window Backpressure 30
  31. 31. Principes de base Gestion d’erreurs • Aucune exception levée hors de l’Observable par défaut • Si onError lève une exception, celle ci remonte dans une OnErrorFailedException • OnErrorNotImplementedException est levée si l’Observer n’a pas de onError • CompositeException encapsule l’ensemble des exceptions 31
  32. 32. Principes avancés Gestion d’erreurs • OnErrorResumeNext • OnErrorReturn • Retry 32
  33. 33. Principes avancés Gestion d’erreurs • OnErrorResumeNext • OnErrorReturn • Retry 33
  34. 34. Principes avancés Gestion d’erreurs • OnErrorResumeNext • OnErrorReturn • Retry 34
  35. 35. Combinaison de séquences
  36. 36. Combinaison de séquences • Répond aux besoins de fusion entre plusieurs sources de données. • Permet d’arbitrer des sources de données concurrentes. • Permet de corréler les événements issus de plusieurs sources de données. 36
  37. 37. Fusion Combinaison de séquences concat() 37
  38. 38. Fusion Combinaison de séquences startWith() 38
  39. 39. Concurrence Combinaison de séquences amb() 39
  40. 40. Concurrence Combinaison de séquences merge() 40
  41. 41. Corrélation Combinaison de séquences zip() 41
  42. 42. Concurrency
  43. 43. Scheduler Concurrency • Basée sur des Schedulers fourni par RxJava : • computation() • from(Executor) • immediate() • io() • newTread() • trampoline() • Peuvent être utilisés directement • Mais il existe des raccourcis 43
  44. 44. Concurrency subscribeOn() - observeOn() 44
  45. 45. Démo
  46. 46. Conclusion
  47. 47. Conclusion • Framework uniquement pour la gestion d’évènements • Ne sert pas à faire des appels asynchrones • Framework complexe qui demande du temps de prise en main • Utilisé dans des outils open source: Hystrix, rx-vertx 47

×