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

Similar to Rx - ReactiveX

TSQL Advanced Query Techniques
TSQL Advanced Query TechniquesTSQL Advanced Query Techniques
TSQL Advanced Query Techniques
Gianluca Sartori
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam
VMUG IT
 
GreenVulcano ESB Technical Overview (ITA)
GreenVulcano ESB Technical Overview (ITA)GreenVulcano ESB Technical Overview (ITA)
GreenVulcano ESB Technical Overview (ITA)
greenvulcano
 
Telegraph Cq Italian
Telegraph Cq ItalianTelegraph Cq Italian
Telegraph Cq Italian
Alberto Minetti
 
Slide Soru - Collana Seminari CRS4 2015
Slide Soru - Collana Seminari CRS4 2015Slide Soru - Collana Seminari CRS4 2015
Slide Soru - Collana Seminari CRS4 2015
CRS4 Research Center in Sardinia
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi DiscussioneYeser Rema
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
Giorgio Di Nardo
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Lucierna - Application Performance Manager - APM
Lucierna - Application Performance Manager - APMLucierna - Application Performance Manager - APM
Lucierna - Application Performance Manager - APMAlessandro Salvatico
 
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyProgettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Giacomo Russo
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
Sabino Labarile
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Codemotion
 
BanovazDiego-Slides Prelaurea
BanovazDiego-Slides PrelaureaBanovazDiego-Slides Prelaurea
BanovazDiego-Slides Prelaurea
Diego Banovaz
 
PresentazioneLaureaMatteoVettosi
PresentazioneLaureaMatteoVettosiPresentazioneLaureaMatteoVettosi
PresentazioneLaureaMatteoVettosiMatteo Vettosi
 
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
ThinkOpen
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Giacomo Russo
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Par-Tec S.p.A.
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaS
opencityplatform
 

Similar to Rx - ReactiveX (20)

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

Rx - ReactiveX