programación reactiva con rxjava

56
Programación Reactiva 13/09/2016 Google Campus #paradigmarx

Upload: paradigma-digital

Post on 14-Apr-2017

202 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Programación Reactiva con RxJava

Programación Reactiva

13/09/2016Google Campus

#paradigmarx

Page 2: Programación Reactiva con RxJava

¿Quien soy?

[email protected]

#paradigmarx

Page 3: Programación Reactiva con RxJava

1. Qué es programación reactiva

2. RxJava

3. Experiencia en paradigma

4. Ejemplos

ÍNDICE#paradigmarx

Page 4: Programación Reactiva con RxJava

Qué es programación reactiva

¿Por qué ahora?

¿Qué tiene de nuevo?

¿Es la próxima moda pasajera?

¿Ahora se programa todo así?

#paradigmarx

Page 5: Programación Reactiva con RxJava

RxJava ¿Qué es?

Es una librería Java que implementa las ReactiveX

(extensiones reactivas )

“Se basa en el en la composición asíncrona y

programas basados en eventos , mediante el

uso de secuencias observables.”

#paradigmarx

Page 6: Programación Reactiva con RxJava

RxJava ¿Qué ventajas nos aporta?

• Legibilidad

• Simplifica la concurrencia (evitando errores de

programación)

• Composición de operadores y funciones

• Permite añadir comportamiento al procesamiento

asíncrono

• Permite utilizar programación síncrona o asíncrona

#paradigmarx

Page 7: Programación Reactiva con RxJava

RxJava Simplicidad

Como gran ventaja resuelve los problemas que tenía

Java hasta ahora con el manejo de la programación

concurrente. La librería está disponible desde java 6.

Callbacks & Future<T>

#paradigmarx

Page 8: Programación Reactiva con RxJava

RxJava Fundamentos

Para gestionar todo lo que ocurre, esta

librería utiliza principalmente el patrón

Observer

#paradigmarx

Page 9: Programación Reactiva con RxJava

RxJava Patrón Observer

“Es un patrón de diseño que define una

dependencia del tipo uno-a-muchos entre

objetos, de manera que cuando uno de los

objetos cambia su estado, notifica este

cambio a todos los dependientes.”

#paradigmarx

Page 10: Programación Reactiva con RxJava

RxJava Observable

Los observables son los elementos que

notifican a todos sus observers los cambios.

Para ello es necesario que estos observer se

registren de alguna manera.

#paradigmarx

Page 11: Programación Reactiva con RxJava

RxJava Push vs Pull

Estamos acostumbrados a un modelo donde le

pedimos al productor un nuevo elemento cada vez que

lo necesitamos (Pull) en vez de que el productor nos

avise de cuando está disponible (Pull). En ocasiones

provoca bloquear al usuario hasta que esté disponible.

Iterable/ Iterator Observable / Observer

T next() onNext(T)

throws Exception onError(Throwable)

returns onCompleted()

#paradigmarx

Page 12: Programación Reactiva con RxJava

RxJava Eventos

Un elemento observable puede producir 3

tipos de eventos :

• Evento normal

• Evento de terminación

• Evento de error

#paradigmarx

Page 13: Programación Reactiva con RxJava

RxJava Suscripción

Cuando se realiza una subscripción , se crea un objeto

Subscription que nos da acceso al control sobre el flujo

de la información, permitiendo saber si hay elementos

subscritos o terminar la conexión

#paradigmarx

Page 14: Programación Reactiva con RxJava

RxJava Subscriber

Existe un elemento Subscriber que implementa ambos

interfaces, observer (lo que nos permite consumir los

eventos del observable) y subscription (con lo que

podremos controlar el flujo desde dentro del objeto)..

#paradigmarx

Page 15: Programación Reactiva con RxJava

RxJava Subscriber#paradigmarx

Page 16: Programación Reactiva con RxJava

RxJava Creación de observables

• Vacíos : Observable.emtpy()

• Error : Observable.error()

• Con valores concretos : Observable,just(values)

• Custom : Observable.create(details)

• De una lista : Observable.from()

• Rango númerico : Observable.range(from,n)

#paradigmarx

Page 17: Programación Reactiva con RxJava

RxJava Hot vs Cold Observables

Existe 2 tipos de Observables. Se distinguen principalmente

sobre la manera en la que emiten eventos. Los “calientes”

emiten eventos independientemente de si hay alguien

escuchando, mientras que los “fríos” sólo lo hacen cuando

tienen suscriptores, generando el evento para sus suscriptores

en exclusiva.

#paradigmarx

Page 18: Programación Reactiva con RxJava

RxJava Operadores

RxJava tiene una serie de operadores que nos permiten

realizar acciones sobre los elementos del observable,

dominarlos, encadenarlos y realizar composiciones de los

mismos será lo que nos de potencia al usar esta librería. Por

citar algunos

#paradigmarx

Page 19: Programación Reactiva con RxJava

RxJava Transformación

Son operadores que nos van a servir para aplicar

transformaciones a los elementos de origen de manera que

emitamos objetos distintos a la salida

#paradigmarx

Page 20: Programación Reactiva con RxJava

RxJava Map

Nos permite aplicar una transformación a un elemento de

nuestro objeto para transformarlo en otra cosa.

#paradigmarx

Page 21: Programación Reactiva con RxJava

RxJava Scan

Aplica una función a cada dato emitido y emite ese valor

secuencialmente

#paradigmarx

Page 22: Programación Reactiva con RxJava

RxJava Reduce

Aplica una función a cada dato emitido y emite el resultado

#paradigmarx

Page 23: Programación Reactiva con RxJava

RxJava Buffer

Permite almacenar un grupo de resultado y emitirlo como

grupo

#paradigmarx

Page 24: Programación Reactiva con RxJava

RxJava FlatMap

Transforma cada elemento del observable en otra sucesión de

observable, se suscribe y los une en único observable

#paradigmarx

Page 25: Programación Reactiva con RxJava

RxJava GroupBy

Divide el observable inicial en un conjunto de observables en

base a un criterio.

#paradigmarx

Page 26: Programación Reactiva con RxJava

RxJava Cache

Almacena todos los resultados y los repite siempre igual.

Hay que tener cuidado con la memoria si estamos

manejando Observables infinitos

#paradigmarx

Page 27: Programación Reactiva con RxJava

RxJava Filtrado

Permiten descartar ciertos elementos y emitir sólo un

subconjunto de los elementos iniciales.

#paradigmarx

Page 28: Programación Reactiva con RxJava

RxJava Filter

Realiza un filtrado sobre los eventos de origen

#paradigmarx

Page 29: Programación Reactiva con RxJava

RxJava Distinct

Elimina los duplicados

#paradigmarx

Page 30: Programación Reactiva con RxJava

RxJava Otros

• First

• Last

• Take , TakeLast,TakeUntil, TakeWhile

• Skip, SkipLast, SkipUntil, SkipWhile

#paradigmarx

Page 31: Programación Reactiva con RxJava

RxJava Combinacion de Observables

Es muy habitual trabajar con un conjunto de observables

que queramos combinar de alguna manera. Para ello

RxJava nos ofrece operadores que permiten combinarlos

para emitir un resultado.

#paradigmarx

Page 32: Programación Reactiva con RxJava

RxJava Merge /Concat

Estos operadores se suscriben los observables que le

pasemos como parámetro y unifica los eventos en un

único stream de salida.

#paradigmarx

Page 33: Programación Reactiva con RxJava

RxJava Switch

Muestra los eventos del último observable que ha

producido eventos. Cuando aparece un elemento en un

observable posterior, se borra la suscripción actual.

#paradigmarx

Page 34: Programación Reactiva con RxJava

RxJava Zip

Combina elementos de distintos observables y los fusiona

en un único elemento

Es importante que estén lo más sincronizados posible.

#paradigmarx

Page 35: Programación Reactiva con RxJava

RxJava CombineLatest/Amb

Permite realizar combinaciones con elementos sin que

estén sincronizados

#paradigmarx

Page 36: Programación Reactiva con RxJava

RxJava Temporales

Permiten alterar el tiempo en la generación de eventos.

#paradigmarx

Page 37: Programación Reactiva con RxJava

RxJava Timer

Crea un observable para que emita un evento determinado

en un tiempo predefinido.

#paradigmarx

Page 38: Programación Reactiva con RxJava

RxJava Delay

Retrasa la emisión de eventos por un determinado tiempo

#paradigmarx

Page 39: Programación Reactiva con RxJava

RxJava Interval

Emite una secuencia de números infinitos separados por

un intervalo definido

#paradigmarx

Page 40: Programación Reactiva con RxJava

RxJava Repeat

Crea un Observable que repite un evento múltiples veces.

#paradigmarx

Page 41: Programación Reactiva con RxJava

RxJava Retry

Permite reconectar cuando se produce un error

#paradigmarx

Page 42: Programación Reactiva con RxJava

RxJava Single

Emite un único evento o da error

#paradigmarx

Page 43: Programación Reactiva con RxJava

RxJava Timeout

Copia el Observable en la salida salvo que se produzca un

hueco mayor entre eventos al que se pasa por parámetro

#paradigmarx

Page 44: Programación Reactiva con RxJava

RxJava Try/catch

RxJava nos permite varias formas de utilizar el try catch.

Quizás una de las más legibles sea OnErrorResumeNext

#paradigmarx

Page 45: Programación Reactiva con RxJava

RxJava ¿Qué operador usar?

Para los principiantes existe un árbol de decisión que nos

ayuda a saber cual es el que deberíamos usar.

Podéis consultarlo en

http://reactivex.io/documentation/operators.html

#paradigmarx

Page 46: Programación Reactiva con RxJava

RxJava Side effects

Podemos añadir comportamiento a lo que pasa cuando

suceden ciertos eventos. RxJava nos da muchos eventos a los

que suscribirnos, pero no se pueden alterar :

• doOnCompleted() )

• doOnEach()

• doOnError()

• doOnNext()

• doOnRequest()

• doOnSubscribe()

• doOnTerminate()

• doOnUnsubscribe() )

#paradigmarx

Page 47: Programación Reactiva con RxJava

RxJava Concurrencia

Normalmente la concurrencia la va a decidir el que nos

consume.

Por ejemplo indicando suscribeOn(scheduler) o

ObserverOn(Scheduler)

#paradigmarx

Page 48: Programación Reactiva con RxJava

RxJava Lazy vs Eager

Cuando utilizamos RxJava estamos aprovechando las ventajas

de una ejecución perezosa. La ejecución se pospone al último

momento posible, esto es cuando un usuario se suscribe.

Esto ayuda a no bloquear recursos innecesariamente

Cuando creemos Observables utilizaremos Defer, utiliza una

factoria de observable y lo hacer de forma perezosa

#paradigmarx

Page 49: Programación Reactiva con RxJava

RxJava Bloqueante a No bloqueante

Con RxJava pasar de no bloqueante a bloqueante es muy

sencillo utilizando el operador toBlocking(). Lo contrario, es

más complicado porque implica un rediseño del algoritmo,

aunque RxJava da funciones para ello.

#paradigmarx

Page 50: Programación Reactiva con RxJava

Paradigma + RxJava

Consumo bajo de recursos

Gran rendimiento

Buen compañero con Vert.x

Mejora de legibilidad separando la operación

de la orquestación

#paradigmarx

Page 51: Programación Reactiva con RxJava

Ejemplos

#paradigmarx

Page 52: Programación Reactiva con RxJava

#paradigmarx

Page 53: Programación Reactiva con RxJava

#paradigmarx

Page 54: Programación Reactiva con RxJava

#paradigmarx

http://developer.couchbase.com/documentation/server/4.1/sdks/java-2.2/documents-atomic.html

Page 55: Programación Reactiva con RxJava

#paradigmarx

Page 56: Programación Reactiva con RxJava

#paradigmarx

Muchas gracias

Buscamos talento : [email protected]