ReactiveX - RxJs
ReactiveX - RxJs
¿Cuando usar Rx?
- Eventos en la interfaz de usuario.
- Cuando es necesario notificar sobre cambios en un objeto(s).
- Comunicación por sockets.
- Cuando necesitamos trabajar con flujos de información(Streams).
Piezas fundamentales de la programación reactiva
- Observables
- Son la fuente de información
- Pueden emitir multiples valores, sólo uno o ninguno.
- Pueden emitir errores
- Pueden ser infinitos, finitos. (Completarse)
- Pueden ser síncronos o asíncronos
- Subscribers
- Se subscriben a un observable, es decir, estar pendiente de lo que realiza el observable
- Consumen / observan la data del observable
- Pueden recibir los errores y eventos del observable
- Desconocen todo lo que se encuentra detrás del observable
- Operators
- Es la pieza fundamental
- Usados para transformar Observables ( map, group, scan...)
- Usados para filtrar Observables (filter, distinct, skip, debounce...)
- Usados para combinar Observables
- Usados para crear nuevos observables
- Ejemplo:
- Rastrear la ubicación del usuario
- Sólo tomar la ubicación cuando la precisión es menor a 20 metros
- También seguir la aceleración y el sensor magnético para determinar el acimut
- Combinar los valores del acimut y la ubicación
- Enviar cada 5 segundos la información a una API
- Con la respuesta del API, dibujar en el UI la información deseada.
Beneficios de la programación reactiva
- Evitar el "Callback Hell"
- Trabajar de forma simple tareas síncronas y asíncronas
- Uso de operadores para reducir y simplificar el trabajo
- Es fácil transformar los flujos (streams) de información
- Código más limpio y fácil de leer
- Fácil de implementar. Lo más complicado es elegir qué operador necesitaos
- Fácil anexionar procedimientos sin alterar el producto final.
ReactiveX: rxjs firebase Una API para programación asíncrona usando observables
- Es una combinación de las mejores ideas del patrón Observer e Iterator y programación funcional.
- Observer: Es un patrón de diseño de software 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.
- Notificar cuando suceden los cambios
- Iterador: En POO, el patrón iterado define una interfaz que declara los métodos necesarios para acceder secuencialmente a un grupo de objetos de una colección.
- Poder ejecutar operaciones secuenciales
- primero(), siguiente(), hayMas() y elemento actual()
- Programación Funcional: Es básicamente, crear un conjunto de funciones que tengan un objetivo específico. Es de decir, si tengo una función que reciba 'A', y retorna 'A+1', siempre que yo llame a esa función, retornará 'A+1'.
- Tener funciones con tareas específicas que reciban argumentos y no mute la información
- Sin efectos secundarios, sin mutar la data.
- Muchos lenguajes pasan por referencia los objetos.
- ReactiveX o Rx previenen que estos objetos muten de manera accidental cuando transformamos la data con operadores o fluya la data a través de los Observers
Diagramas de canicas: ¿cómo leer los diagramas de canicas?
- Los observables suelen llevar el signo $ al final: clicks$:
- En el primer momento que el observer intervalo$ emite el primer valor, éste va a pasar por el scan y la salida para este caso es (0+1=1).
- Cuando intervalo$ emita el segundo valor 2 el scan (que es un acumulador ) y la salida será (1+2=3).
- Cuando intervalo$ emita el segundo valor 3 la salida será (3+3 = 6).
- Cuando intervalo$ emita el segundo valor 4 la salida será (6+4 = 10).
- Cuando intervalo$ emita el segundo valor 5 la salida será (10+5 = 15).
- etc...
- La línea vertical es la finalización del observable