stringtranslate.com

ReactivoX

ReactiveX ( Rx , también conocido como Reactive Extensions ) es una biblioteca de software creada originalmente por Microsoft que permite que los lenguajes de programación imperativos operen en secuencias de datos independientemente de si los datos son sincrónicos o asincrónicos . Proporciona un conjunto de operadores de secuencia que operan en cada elemento de la secuencia. Es una implementación de programación reactiva y proporciona un modelo para las herramientas que se implementarán en múltiples lenguajes de programación .

Descripción general

ReactiveX es una API para programación asincrónica con flujos observables. [1]

La programación asincrónica permite a los programadores llamar funciones y luego hacer que las funciones "devuelvan la llamada" cuando finalizan, generalmente dándole a la función la dirección de otra función para ejecutar cuando finaliza. Los programas diseñados de esta manera a menudo evitan la sobrecarga de tener muchos subprocesos iniciando y deteniéndose constantemente.

Los flujos observables (es decir, flujos que se pueden observar) en el contexto de las Extensiones Reactivas son como emisores de eventos que emiten tres eventos: siguiente, error y completo. Un observable emite los siguientes eventos hasta que emite un evento de error o un evento completo. Sin embargo, en ese momento no emitirá más eventos, a menos que se vuelva a suscribir.

Motivación

Para secuencias de datos, combina las ventajas de los iteradores con la flexibilidad de la programación asincrónica basada en eventos. También funciona como una promesa simple, eliminando la pirámide de fatalidad que resulta de múltiples capas de devoluciones de llamadas.

Observables y observadores

ReactiveX es una combinación de ideas de los patrones de observador e iterador y de la programación funcional . [2]

Un observador se suscribe a una secuencia observable. Luego, la secuencia envía los elementos al observador uno a la vez, generalmente llamando a la función de devolución de llamada proporcionada. El observador maneja cada uno antes de procesar el siguiente. Si llegan muchos eventos de forma asincrónica, se deben almacenar en una cola o descartar. En ReactiveX, nunca se llamará a un observador con un elemento fuera de servicio o (en un contexto de subprocesos múltiples) se llamará antes de que se haya devuelto la devolución de llamada para el elemento anterior. Las llamadas asincrónicas permanecen asíncronas y pueden manejarse devolviendo un observable.

Es similar al patrón de iteradores en el sentido de que si ocurre un error fatal, notifica al observador por separado (llamando a una segunda función). Cuando se han enviado todos los elementos, se completa (y notifica al observador llamando a una tercera función). La API de Reactive Extensions también toma prestados muchos de sus operadores de operadores iteradores en otros lenguajes de programación.

Las extensiones reactivas son diferentes de la programación reactiva funcional, como se explica en la Introducción a las extensiones reactivas:

A veces se le llama "programación reactiva funcional", pero es un nombre inapropiado. ReactiveX puede ser funcional y puede ser reactivo, pero la "programación reactiva funcional" es un animal diferente. Un punto principal de diferencia es que la programación reactiva funcional opera con valores que cambian continuamente con el tiempo, mientras que ReactiveX opera con valores discretos que se emiten con el tiempo. (Consulte el trabajo de Conal Elliott para obtener información más precisa sobre la programación reactiva funcional). [2]

Operadores reactivos

Un operador es una función que toma un observable (la fuente) como primer argumento y devuelve otro observable (el destino u observable externo). Luego, para cada elemento que emita el observable de origen, aplicará una función a ese elemento y luego lo emitirá en el Observable de destino. Incluso puede emitir otro Observable en el observable de destino. Esto se llama observable interno.

A un operador que emite observables internos puede ir seguido de otro operador que de alguna manera combine los elementos emitidos por todos los observables internos y emita el elemento en su observable externo. Ejemplos incluyen:

Los operadores se pueden encadenar para crear flujos de datos complejos que filtren eventos según ciertos criterios. Se pueden aplicar varios operadores al mismo observable.

Algunos de los operadores que se pueden utilizar en Reactive Extensions pueden resultar familiares para los programadores que utilizan lenguajes de programación funcionales, como mapear, reducir, agrupar y comprimir. [3] Hay muchos otros operadores disponibles en Reactive Extensions, aunque los operadores disponibles en una implementación particular para un lenguaje de programación pueden variar.

Ejemplos de operadores reactivos

A continuación se muestra un ejemplo del uso de los operadores de mapa y reducción. Creamos un observable a partir de una lista de números. Luego, el operador del mapa multiplicará cada número por dos y devolverá un observable. El operador de reducción luego sumará todos los números que se le proporcionen (el valor de 0 es el punto de partida). Llamar a subscribe registrará un observador que observará los valores del observable producido por la cadena de operadores. Con el método de suscripción, podemos pasar una función de manejo de errores, llamada cada vez que se emite un error en el observable, y una función de finalización cuando el observable ha terminado de emitir elementos.

importar { de , Observable , mapear , reducir } desde 'rxjs' ;        fuente constante : Observable < número > = de ( 1 , 2 , 3 , 4 , 5 ); fuente . tubería ( mapa (( valor ) => valor * 2 ), reducir (( suma , valor ) => suma + valor , 0 ) ) . suscribirse ({ siguiente : ( valor ) => { consola . log ( valor ); }, error : ( error ) => { consola . error ( error ); }, completo : () => { consola . log ( 'hecho ' ); }, });                                          

El ejemplo anterior utiliza la implementación RxJS de Reactive Extensions para el lenguaje de programación JavaScript.

Historia

Reactive Extensions (Rx) fue creado por el equipo de programación en la nube de Microsoft alrededor de 2011, como subproducto de un esfuerzo mayor llamado Volta . Originalmente estaba destinado a proporcionar una abstracción para eventos en diferentes niveles en una aplicación para admitir la división de niveles en Volta. El logo del proyecto representa una anguila eléctrica, que es una referencia a Volta. El sufijo de extensiones en el nombre es una referencia a la tecnología Parallel Extensions que se inventó casi al mismo tiempo; los dos se consideran complementarios.

La implementación inicial de Rx fue para .NET Framework y se lanzó el 21 de junio de 2011. Posteriormente, el equipo comenzó la implementación de Rx para otras plataformas, incluidas JavaScript y C++ . La tecnología se lanzó como código abierto a finales de 2012, inicialmente en CodePlex . Más tarde, el código se trasladó a GitHub .

Ver también

Referencias

  1. ^ "ReactivoX". reactivox.io . Consultado el 20 de febrero de 2020 .
  2. ^ ab "ReactiveX - Introducción". ReactivoX.io . Consultado el 23 de septiembre de 2018 .
  3. ^ "ReactiveX - Operadores". ReactivoX.io . Consultado el 23 de septiembre de 2018 .

enlaces externos