SlideShare a Scribd company logo
REACTIVEX
CANALE YOUTUBE
ABOUT ME
Luca Evaroni
Solution Architect - Software Developer
YouTube: https://www.youtube.com/c/DeVLearninG
Pagina Facebook: www.facebook.com/devlearning2020
LinkedIn: www.linkedin.com/in/lucaevaroni - #DeVLearninG
Sito Web: www.luca.evaroni.name
01
02
04
05
03
06
07
Reactive programming
Reactive eXtension (Rx)
Operatori
Sommario
Scheduler
Observable, Observer e Subject
Quando usarla
Conclusioni
REACTIVE PROGRAMMING
«La Reactive Programming è un paradigma di
programmazione dichiarativa basata su
streams di dati asincroni e sulla propagazione
del cambiamento»
Esempio:
a = b + c
Programmazione standard:
salvo ulteriori assegnazioni il valore di «a»
non cambia anche se cambiano «b» e «c»
Programmazione reattiva:
Il valore di «a» viene aggiornato ad ogni
cambiamento di «b» o «c»
REACTIVE PROGRAMMING
Le applicazioni sviluppate con questa metologia sono
fortemente orientate ad un approoccio event-driven e
dichiarativo piuttosto che imperativo
REACTIVE EXTENSION (RX)
ReactiveX
Disponibile sul sito
http://reactivex.io/
«Un’API per la programmazione
asincrona con flussi osservabili»
REACTIVE EXTENSION (RX)
Cosa contiene Rx?
Un insieme di tipi che rappresentano flussi di dati asincroni
Un insieme di operatori che consentono di effettuare query sui flussi (streams)
Un insieme di tipi utilizzabili per parametrizzare e gestire la concorrenza
REACTIVE EXTENSION (RX)
Concetti fondamentali?
Observable (streams)
Observer (subscriber, watcher, reactor)
Subscribe o Subscription
Events
OBSERVABLE, OBSERVER E SUBJECT
Observable e Observer
Applicazione
Flusso di dati
OBSERVABLE, OBSERVER E SUBJECT
Observable e Observer
Observer
OBSERVABLE, OBSERVER E SUBJECT
Subscribe
Observer Observable
subscribe
onNext
onComplete
onError
OBSERVABLE, OBSERVER E SUBJECT
Unsubscribe
Observer Observable
unsubscribe()
onNext
onComplete
onError
OBSERVABLE, OBSERVER E SUBJECT
Tipi di Observable
Tipologie di Observable
Hot
L’emissione degli eventi
inizia alla creazione
dell’Observable
Cold
L’Observer attende la prima
sottoscrizione
OBSERVABLE, OBSERVER E SUBJECT
Subject
4 principali Subject da conoscere
AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
OBSERVABLE, OBSERVER E SUBJECT
AsyncSubject
AsyncSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
AsyncSubject
AsyncSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
BehaviorSubject
BehaviorSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
BehaviorSubject
BehaviorSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
PublishSubject
PublishSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
PublishSubject
PublishSubject
subscribe()
subscribe()
OBSERVABLE, OBSERVER E SUBJECT
ReplaySubject
ReplaySubject
subscribe()
subscribe()
OPERATORI
Introduzione
Il vero punto di forza di Rx
sono gli operatori
Consentono di:
• Trasformare
• Combinare
• Manipolare
La maggior parte degli operatori
lavora su Observable e restituisce
Observable.
Applicazione degli operatori in
cascata.
Operator Observable
Observable
Operator Observable
Operator Observable
OPERATORI
Categorie
Gli operatori si possono suddividere in 8 categorie
Creazione
Trasformazione
Filtro
Combinazione
Utilità
Manipolazione degli errori
Condizionali
Matematici e di aggregazione
OPERATORI
Creazione - Create
create({onNext ; onNext ; onComplete; }
OPERATORI
Creazione - From
from
OPERATORI
Trasformazione - Map
map(x => 10 * x)
1 2 3
10 20 30
OPERATORI
Trasformazione - FlatMap
flatmap( )
OPERATORI
Filtro - Debounce
1 2 3
1 4 5
debounce
4 5
OPERATORI
Filtro - Distinct
1 2 2
1 2 3
distinct
1 3
OPERATORI
Filtro - Filter
1 20 3
1320
filter(x => x > 10)
13 10
OPERATORI
Combinazione - CombineLatest
1 2 3
1A 2A 2C
combineLatest((x, y) => "" + x + y)
A B C
2B 3C
OPERATORI
Combinazione - Join
join(( , ) )
OPERATORI
Combinazione - Merge
1 2 3
merge
20 30 40
1 2 320 30 40
OPERATORI
Combinazione - Switch
switch
OPERATORI
Combinazione - Zip
1 2 3
1A 4D
zip
A B C
2B 3C
D
4 5
OPERATORI
Error - Catch
catch( )
OPERATORI
Utility - Delay
delay
OPERATORI
Utility - TimeInterval
timeInterval
subscribe()
T1 T2 T3
T1 T2 T3
OPERATORI
Condizionali - Contains
3 45 8
contains(8)
32
TRUE
OPERATORI
Condizionali - SequenceEqual
1 2 3
sequenceEqual
1 2 3 4
4
TRUE
OPERATORI
Matematici - Count
3 45 8
count(x => x > 10)
32
2
OPERATORI
Matematici - Concat
1 1 1
concat
2 2
1 1 1 2 2
SCHEDULER
Rx di default è single-thread
Per poter utilizzare processazioni multi-thread
occorre utilizzare gli Scheduler
Di default l’esecuzione dei metodi definiti
dall’Observer viene eseguita sullo stesso thread
delle chimate OnNext - OnError - OnCompleted
SCHEDULER
Operatori per gestire la concorrenza durante:
L’invocazione della
sottoscrizione
SubscribeOn()
L’osservazione delle
notifiche
ObserveOn()
SCHEDULER
Ogni implementazione della libreria Rx ha un set di Scheduler
Eseguire operazioni su piu thread paralleli
Eseguire operazioni immediatamente sul thread corrente
Eseguire operazioni al piu presto possibile sul thread corrente
Eseguire operazioni con un determinato delay
Scheduler per lo Unit Testing
SCHEDULER
Introduzione di race-condition, deadlock e corrupted-state.
Rx mitiga molto i problemi legati alla concorrenza.
Evitare operazioni bloccanti come First, Last e Single.
Non usiamola se non serve, cerchiamo di mantenere il codice il piu semplice
e pulito possibile.
L’introduzione della concorrenza aumenta la complessità
QUANDO USARLA
Quando usarla
Eventi della user interface
Eventi dell’infrastruttura
Eventi del dominio dell’applicazione
Eventi scaturiti da un message bus o WebSockets
Eventi generati da social media, rss feed
Eventi generati dal completamento di una chiamata Http
Eventi generati da eventuali sensori quali gps e accelerometro
CONCLUSIONI
Rx è una libreria molto potente e versatile,
puo essere fondamentale in alcune situazioni con flussi di dati da gestire.
Disponibile in tantissimi linguaggi tra cui
C# - Rx.Net
Java - RxJava
Javascript - RxJS
C++ - RxCpp
Swift - RxSwift
Kotlin - RxKotlin
....
http://reactivex.io/languages.html
Non è l’unica libreria, ma è sicuramente la piu diffusa ;)
GRAZIE!
Non dimenticarti
di iscriverti al canale YouTube
DeVLearninG
e mettere Mi Piace al video
Per noi è molto importante il tuo sostegno
Condividi se ti è piaciuto ;)
CREDITS
◂ Presentation template by Slidesgo
◂ Icons by Flaticon
◂ Infographics by Freepik
◂ Author introduction slide photo created by Freepik
◂ Text & Image slide photo created by Freepik.com
#01
879
0
#00
a6a
6
#1d
cdc
3
#f5
413
2
#ff7
c4e
#ffa
73b
#43
434
3

More Related Content

PDF
Un backend per tutte le stagioni con Spring
PPTX
Evento EMC Forum 2013 | Il Disaster Recovery di GSE
KEY
Notes for an Enterprise Scheduling Distributed Application
PPTX
Da imperativo a reattivo: Bacon.JS
PDF
Designing with microservices - Daniele Mondello
PPTX
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
PDF
LARUS 10th - Rampado Omar
PDF
Stanco delle solite Web App? Passa al Prgressive
Un backend per tutte le stagioni con Spring
Evento EMC Forum 2013 | Il Disaster Recovery di GSE
Notes for an Enterprise Scheduling Distributed Application
Da imperativo a reattivo: Bacon.JS
Designing with microservices - Daniele Mondello
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
LARUS 10th - Rampado Omar
Stanco delle solite Web App? Passa al Prgressive

Similar to Rx - ReactiveX (20)

PPT
3DD 1e Reconfig
PPTX
TSQL Advanced Query Techniques
PDF
Progetto SOD Davide Sito
PDF
03 vmugit aprile_2018_veeam
PPS
GreenVulcano ESB Technical Overview (ITA)
PPTX
Telegraph Cq Italian
PDF
Slide Soru - Collana Seminari CRS4 2015
PPT
Tesi Discussione
PPTX
Rich client application: MVC4 + MVVM = Knockout.js
ODP
Aspect Oriented Programming
PPTX
Lucierna - Application Performance Manager - APM
PPTX
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
PDF
e-SUAP - General software architecture (Italiano)
PPTX
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
PPTX
BanovazDiego-Slides Prelaurea
PDF
PresentazioneLaureaMatteoVettosi
PDF
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
PPTX
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
PDF
Open Source Day 2015 - DBaaS con Docker: un caso di studio
PPTX
OCP-Architettura e caratteristiche della PaaS
3DD 1e Reconfig
TSQL Advanced Query Techniques
Progetto SOD Davide Sito
03 vmugit aprile_2018_veeam
GreenVulcano ESB Technical Overview (ITA)
Telegraph Cq Italian
Slide Soru - Collana Seminari CRS4 2015
Tesi Discussione
Rich client application: MVC4 + MVVM = Knockout.js
Aspect Oriented Programming
Lucierna - Application Performance Manager - APM
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
e-SUAP - General software architecture (Italiano)
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
BanovazDiego-Slides Prelaurea
PresentazioneLaureaMatteoVettosi
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Open Source Day 2015 - DBaaS con Docker: un caso di studio
OCP-Architettura e caratteristiche della PaaS
Ad

Rx - ReactiveX