SlideShare una empresa de Scribd logo
1 de 23
#TechMeetup
Be Reactive
Be Reactive
Agenda
Intro
Anatomia
Operadores
Showtime!
Be Reactive - Intro
Qué diferencia hay entre una consulta DB y las
transmisiones de un mouse por puerto serie?
Be Reactive - Intro
Programación reactiva es programar usando stream de datos de
manera asíncrona.
Combinación de Patrones Observer e Interator junto
Programación Funcional
Be Reactive - Intro
Rx es:
Set of types -> Representing async data stream
Set of Operators -> Query async data stream
Set of Types -> Parameterize concurrency
Be Reactive - Anatomia
Los bloques básicos son: Observables y Observers
Una implementación común de los Observers son los Subscribers
Un Observable emite items y un Subscriber los consume
Be Reactive - Anatomia
Pero el patrón Observer…
Una diferencia, es que un Observable no emite items hasta no alguien no se
suscriba explícitamente.
Pero el patrón Iterator…
Hay una dualidad con este patrón,
Evento Iterable (pull) Observable (push)
Recuperar datos T next() onNext(T)
Descubrir errores throws Exception onError(Exception)
Completado returns onCompleted()
Be Reactive - Anatomia
Si combinamos Observables y Observers:
Observable.from()
.subscribeOn()
.observeOn()
.subscribe()
Be Reactive - Anatomia
Y la concurrencia....? Schedulers
Observable.from()
.subscribeOn()
.observeOn()
.subscribe()
subscribeOn() -> realizá todas las operaciones en este Thread.
observerOn() -> pusheá los resultados a este Thread.
Observers / Subscriber
new Observer<T>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable throwable) {}
@Override
public void onNext(T t) {}
};
Be Reactive - Anatomia
Be Reactive - Anatomia
Subscriptions = Observable Observer
Be Reactive - Operadores
Permiten componer secuencias asíncronas de manera declarativa.
Operan sobre Observables y retornan Observables
Permiten encadenarse, como el patrón Builder, pero en este caso el orden si
importa.
Be Reactive - Operadores
create() crea un Observable desde cero.
from() convierte otros objetos en Observables
just() convierte otro objeto u objetos en Observables que emita esos objetos.
Be Reactive - Operadores
map() (Transforming)
Puede ser usado para transformar un ítem emitido en otro tipo.
myObservable.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return s.hashCode();
}
});
Be Reactive - Operadores
flatMap() (Transforming)
Transforma los ítems emitidos por un Observable en Observables, y luego
“aplana” la emisión de esos Observables en un solo.
myObservable.flatMap(new Func1<List<String>, Observable<String>>()
{
@Override
public Observable<String> call(List<String> list) {
return Observable.from(list);
}
})
Be Reactive - Operadores
zip() (Combining)
Combina los ítems emitidos por múltiples Observables y emite un solo ítem
basado en el resultado de una función.
Observable.zip(myObservable,
myObservable2,
new Func2<String, String, Pair<String, String>>() {
@Override
public Pair<String, String> call(String s, String s2) {
return new Pair<String, String>(s, s2); }});
Be Reactive - Operadores
combineLastest() (Combining)
Cuando un ítem es emitido por alguno de los Observables, lo combina con el
último emitido por cada Observable y emite el resultado basado en una función
Be Reactive - Operadores
debounce() (filtering)
Solo emite un ítem si un tiempo particular ha transcurrido.
myObservable.debounce(400, TimeUnit.MILLISECONDS)
Be Reactive - Example
AsyncTask
new AsyncTask<String, Void ,User>(){
@Override
protected User doInBackground(String... values) {
return githubApi.getUser(values[0]);
}
@Override
protected void onPostExecute(User user) {
super.onPostExecute(user);
}
};
Be Reactive - Example
Rx
Observable.create(new Observable.OnSubscribe<User>() {
@Override
public void call(Subscriber<? super User> subscriber) {
User user = githubApi.getUser("username");
subscriber.onNext(user);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
...
});
Be Reactive - Cooking, Cooking, Cooking
santexgroup.com

Más contenido relacionado

Destacado

นาย ณัฐดนัย รัตนวิชัยกุล 24
นาย ณัฐดนัย รัตนวิชัยกุล 24นาย ณัฐดนัย รัตนวิชัยกุล 24
นาย ณัฐดนัย รัตนวิชัยกุล 24cookie47
 
проект образование 2
проект образование 2проект образование 2
проект образование 2Murat77
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceSantex Group
 
общедоступность и бесплатность
общедоступность и бесплатностьобщедоступность и бесплатность
общедоступность и бесплатностьMurat77
 
MY INTERN EXPERIENCE @ CPL
MY INTERN EXPERIENCE @ CPLMY INTERN EXPERIENCE @ CPL
MY INTERN EXPERIENCE @ CPLaltheaibba
 
о совете
о советео совете
о советеMurat77
 
о педагогическом совете
о педагогическом советео педагогическом совете
о педагогическом советеMurat77
 
Community Manager Agriturismi
Community Manager AgriturismiCommunity Manager Agriturismi
Community Manager Agriturismipromoemotion
 
Act 10. organización del espacio y tiempo
Act 10. organización del espacio y tiempoAct 10. organización del espacio y tiempo
Act 10. organización del espacio y tiempoPoncho Romero
 
Taoj 14 session one
Taoj 14 session one Taoj 14 session one
Taoj 14 session one flutedaddy
 
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...Software AG South Africa
 
ใบงานที่ 8
ใบงานที่ 8ใบงานที่ 8
ใบงานที่ 8warangnan
 
Peirce Commencement 2014 Preshow
Peirce Commencement 2014 PreshowPeirce Commencement 2014 Preshow
Peirce Commencement 2014 Preshowpeirceslideshow
 
Lessons Learned from Tenet's 2015 Most Powerful Brands
Lessons Learned from Tenet's 2015 Most Powerful BrandsLessons Learned from Tenet's 2015 Most Powerful Brands
Lessons Learned from Tenet's 2015 Most Powerful BrandsTenet Partners
 

Destacado (17)

นาย ณัฐดนัย รัตนวิชัยกุล 24
นาย ณัฐดนัย รัตนวิชัยกุล 24นาย ณัฐดนัย รัตนวิชัยกุล 24
นาย ณัฐดนัย รัตนวิชัยกุล 24
 
проект образование 2
проект образование 2проект образование 2
проект образование 2
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications Performance
 
общедоступность и бесплатность
общедоступность и бесплатностьобщедоступность и бесплатность
общедоступность и бесплатность
 
MY INTERN EXPERIENCE @ CPL
MY INTERN EXPERIENCE @ CPLMY INTERN EXPERIENCE @ CPL
MY INTERN EXPERIENCE @ CPL
 
о совете
о советео совете
о совете
 
о педагогическом совете
о педагогическом советео педагогическом совете
о педагогическом совете
 
Community Manager Agriturismi
Community Manager AgriturismiCommunity Manager Agriturismi
Community Manager Agriturismi
 
Act 10. organización del espacio y tiempo
Act 10. organización del espacio y tiempoAct 10. organización del espacio y tiempo
Act 10. organización del espacio y tiempo
 
Dixiana y frank
Dixiana y frankDixiana y frank
Dixiana y frank
 
Taoj 14 session one
Taoj 14 session one Taoj 14 session one
Taoj 14 session one
 
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...
Software AG Live - Boosting Business Performance in the Cloud - Joerg Klueckm...
 
Polish MEP guide 2014
Polish MEP guide 2014Polish MEP guide 2014
Polish MEP guide 2014
 
ใบงานที่ 8
ใบงานที่ 8ใบงานที่ 8
ใบงานที่ 8
 
Healthy water
Healthy waterHealthy water
Healthy water
 
Peirce Commencement 2014 Preshow
Peirce Commencement 2014 PreshowPeirce Commencement 2014 Preshow
Peirce Commencement 2014 Preshow
 
Lessons Learned from Tenet's 2015 Most Powerful Brands
Lessons Learned from Tenet's 2015 Most Powerful BrandsLessons Learned from Tenet's 2015 Most Powerful Brands
Lessons Learned from Tenet's 2015 Most Powerful Brands
 

Similar a Tech Meetup: Be reactive with Android

Similar a Tech Meetup: Be reactive with Android (15)

Informe insercion
Informe insercionInforme insercion
Informe insercion
 
Utp ia_2015-1 lab3
 Utp ia_2015-1 lab3 Utp ia_2015-1 lab3
Utp ia_2015-1 lab3
 
Utp sirn_2015-1 lab3
 Utp sirn_2015-1 lab3 Utp sirn_2015-1 lab3
Utp sirn_2015-1 lab3
 
Programación Reactiva en Android
Programación Reactiva en AndroidProgramación Reactiva en Android
Programación Reactiva en Android
 
JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
Rx js
Rx jsRx js
Rx js
 
Utp sirn_2015-2 lab3
 Utp sirn_2015-2 lab3 Utp sirn_2015-2 lab3
Utp sirn_2015-2 lab3
 
Utp ia_2014-2 lab3
 Utp ia_2014-2 lab3 Utp ia_2014-2 lab3
Utp ia_2014-2 lab3
 
Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314
 
Utp sirn_2014-2 lab3
 Utp sirn_2014-2 lab3 Utp sirn_2014-2 lab3
Utp sirn_2014-2 lab3
 
Trabajo Fin de Máster
Trabajo Fin de MásterTrabajo Fin de Máster
Trabajo Fin de Máster
 
Programación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en JavaProgramación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en Java
 
Oledbconnection (clase)
Oledbconnection (clase)Oledbconnection (clase)
Oledbconnection (clase)
 
Pf con scala
Pf con scalaPf con scala
Pf con scala
 
Functional SE.pdf
Functional SE.pdfFunctional SE.pdf
Functional SE.pdf
 

Más de Santex Group

Entender React Native
Entender React NativeEntender React Native
Entender React NativeSantex Group
 
Server side development using Swift and Vapor
Server side development using Swift and VaporServer side development using Swift and Vapor
Server side development using Swift and VaporSantex Group
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerSantex Group
 
Tech Meetup: How to solve 2 common problems in Android & iOS
Tech Meetup: How to solve 2 common problems in Android & iOSTech Meetup: How to solve 2 common problems in Android & iOS
Tech Meetup: How to solve 2 common problems in Android & iOSSantex Group
 
Tech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadTech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadSantex Group
 
Tech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaTech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaSantex Group
 
TECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITTECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITSantex Group
 
Tech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceTech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceSantex Group
 
Meetup: Mobile Automation
Meetup: Mobile AutomationMeetup: Mobile Automation
Meetup: Mobile AutomationSantex Group
 
User Stories Do's and Dont's
User Stories Do's and Dont'sUser Stories Do's and Dont's
User Stories Do's and Dont'sSantex Group
 
E commerce done the right way: Magento!
E commerce done the right way: Magento!E commerce done the right way: Magento!
E commerce done the right way: Magento!Santex Group
 
Tech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileTech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileSantex Group
 

Más de Santex Group (12)

Entender React Native
Entender React NativeEntender React Native
Entender React Native
 
Server side development using Swift and Vapor
Server side development using Swift and VaporServer side development using Swift and Vapor
Server side development using Swift and Vapor
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttler
 
Tech Meetup: How to solve 2 common problems in Android & iOS
Tech Meetup: How to solve 2 common problems in Android & iOSTech Meetup: How to solve 2 common problems in Android & iOS
Tech Meetup: How to solve 2 common problems in Android & iOS
 
Tech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadTech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con Agilidad
 
Tech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaTech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in Java
 
TECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITTECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GIT
 
Tech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceTech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerce
 
Meetup: Mobile Automation
Meetup: Mobile AutomationMeetup: Mobile Automation
Meetup: Mobile Automation
 
User Stories Do's and Dont's
User Stories Do's and Dont'sUser Stories Do's and Dont's
User Stories Do's and Dont's
 
E commerce done the right way: Magento!
E commerce done the right way: Magento!E commerce done the right way: Magento!
E commerce done the right way: Magento!
 
Tech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileTech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in Agile
 

Último

Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 

Último (7)

Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 

Tech Meetup: Be reactive with Android

  • 1.
  • 4. Be Reactive - Intro Qué diferencia hay entre una consulta DB y las transmisiones de un mouse por puerto serie?
  • 5. Be Reactive - Intro Programación reactiva es programar usando stream de datos de manera asíncrona. Combinación de Patrones Observer e Interator junto Programación Funcional
  • 6. Be Reactive - Intro Rx es: Set of types -> Representing async data stream Set of Operators -> Query async data stream Set of Types -> Parameterize concurrency
  • 7. Be Reactive - Anatomia Los bloques básicos son: Observables y Observers Una implementación común de los Observers son los Subscribers Un Observable emite items y un Subscriber los consume
  • 8. Be Reactive - Anatomia Pero el patrón Observer… Una diferencia, es que un Observable no emite items hasta no alguien no se suscriba explícitamente. Pero el patrón Iterator… Hay una dualidad con este patrón, Evento Iterable (pull) Observable (push) Recuperar datos T next() onNext(T) Descubrir errores throws Exception onError(Exception) Completado returns onCompleted()
  • 9. Be Reactive - Anatomia Si combinamos Observables y Observers: Observable.from() .subscribeOn() .observeOn() .subscribe()
  • 10. Be Reactive - Anatomia Y la concurrencia....? Schedulers Observable.from() .subscribeOn() .observeOn() .subscribe() subscribeOn() -> realizá todas las operaciones en este Thread. observerOn() -> pusheá los resultados a este Thread.
  • 11. Observers / Subscriber new Observer<T>() { @Override public void onCompleted() {} @Override public void onError(Throwable throwable) {} @Override public void onNext(T t) {} }; Be Reactive - Anatomia
  • 12. Be Reactive - Anatomia Subscriptions = Observable Observer
  • 13. Be Reactive - Operadores Permiten componer secuencias asíncronas de manera declarativa. Operan sobre Observables y retornan Observables Permiten encadenarse, como el patrón Builder, pero en este caso el orden si importa.
  • 14. Be Reactive - Operadores create() crea un Observable desde cero. from() convierte otros objetos en Observables just() convierte otro objeto u objetos en Observables que emita esos objetos.
  • 15. Be Reactive - Operadores map() (Transforming) Puede ser usado para transformar un ítem emitido en otro tipo. myObservable.map(new Func1<String, Integer>() { @Override public Integer call(String s) { return s.hashCode(); } });
  • 16. Be Reactive - Operadores flatMap() (Transforming) Transforma los ítems emitidos por un Observable en Observables, y luego “aplana” la emisión de esos Observables en un solo. myObservable.flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> list) { return Observable.from(list); } })
  • 17. Be Reactive - Operadores zip() (Combining) Combina los ítems emitidos por múltiples Observables y emite un solo ítem basado en el resultado de una función. Observable.zip(myObservable, myObservable2, new Func2<String, String, Pair<String, String>>() { @Override public Pair<String, String> call(String s, String s2) { return new Pair<String, String>(s, s2); }});
  • 18. Be Reactive - Operadores combineLastest() (Combining) Cuando un ítem es emitido por alguno de los Observables, lo combina con el último emitido por cada Observable y emite el resultado basado en una función
  • 19. Be Reactive - Operadores debounce() (filtering) Solo emite un ítem si un tiempo particular ha transcurrido. myObservable.debounce(400, TimeUnit.MILLISECONDS)
  • 20. Be Reactive - Example AsyncTask new AsyncTask<String, Void ,User>(){ @Override protected User doInBackground(String... values) { return githubApi.getUser(values[0]); } @Override protected void onPostExecute(User user) { super.onPostExecute(user); } };
  • 21. Be Reactive - Example Rx Observable.create(new Observable.OnSubscribe<User>() { @Override public void call(Subscriber<? super User> subscriber) { User user = githubApi.getUser("username"); subscriber.onNext(user); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { ... });
  • 22. Be Reactive - Cooking, Cooking, Cooking