Introducción

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Quién debería leer este libro

Programación Reactiva con RxJava está dirigido a programadores Java intermedios y avanzados. Debes sentirte bastante cómodo con Java; sin embargo, no es necesario tener conocimientos previos de programación reactiva. Muchos conceptos de este libro están relacionados con la programación funcional, pero tampoco es necesario que estés familiarizado con ella. Hay dos grupos distintos de programadores que pueden beneficiarse de este libro:

  • Artesanos que buscan mejorar el rendimiento en el servidor o un código más fácil de mantener en los dispositivos móviles. Si perteneces a esta categoría, encontrarás ideas y soluciones a problemas reales, así como consejos prácticos. En este caso, RxJava es una herramienta más que este libro ayudará a dominar.

  • Desarrolladores curiosos que han oído hablar de la programación reactiva o de RxJava en particular y quieren conocerla a fondo. Si este es tu caso, y si no tienes previsto aprovechar RxJava en el código de producción, ampliarás considerablemente tus horizontes.

Además, si eres un arquitecto de software práctico, es probable que este libro te ayude. RxJava influye en la arquitectura general de sistemas enteros, por lo que merece la pena conocerlo. Pero incluso si acabas de empezar tu aventura con la programación, intenta pasar por los primeros capítulos, que explican lo básico. Los conceptos subyacentes, como las transformaciones y la composición, son bastante universales y no están relacionados con la programación reactiva.

Nota de Ben Christensen

En 2012, estaba trabajando en una nueva arquitectura para la API de Netflix. Por el camino quedó claro que necesitábamos adoptar la concurrencia y las peticiones de red asíncronas para alcanzar nuestros objetivos. Durante el proceso de exploración de enfoques, me encontré con Jafar Husain, que intentó venderme un enfoque que aprendió cuando estaba en Microsoft, llamado "Rx". En aquel momento, me sentía bastante cómodo con la concurrencia, pero seguía pensando en ella de forma imperativa y muy centrada en Java, ya que Java ha sido mi principal sustento y, por tanto, donde he pasado más tiempo.

Así que, mientras Jafar intentaba venderme el enfoque, me resultaba difícil captar los conceptos debido a su estilo de programación funcional, y me opuse. Siguieron meses de argumentos y discusiones mientras la arquitectura general del sistema seguía madurando, durante los cuales Jafar y yo continuamos nuestras numerosas sesiones de pizarra hasta que comprendí los principios teóricos y, posteriormente, la elegancia y la potencia de lo que podían ofrecer las Extensiones Reactivas.

Decidimos adoptar el modelo de programación Rx en la API de Netflix y finalmente creamos la implementación Java de las Extensiones Reactivas llamada RxJava, siguiendo la convención de nomenclatura iniciada por Microsoft con Rx.Net y RxJS.

En los aproximadamente tres años que trabajé en RxJava, la mayor parte de ellos en abierto en GitHub, tuve el privilegio de trabajar con una comunidad creciente y más de 120 colaboradores para convertir RxJava en un producto maduro utilizado en muchos sistemas de producción, tanto del lado del servidor como del cliente. Ha tenido el éxito suficiente para conseguir más de 15.000 estrellas en GitHub, lo que lo convierte en uno de los 200 proyectos más importantes, y el tercero entre los proyectos que utilizan Java.

George Campbell, Aaron Tull y Matt Jacobs en Netflix fueron esenciales para madurar RxJava desde las primeras versiones hasta lo que ha llegado a ser, incluida la incorporación de lift, Subscriber, backpressure y la compatibilidad con JVM-polyglot. Dávid Karnok se involucró en el proyecto y ahora me ha superado en commits y líneas de código. Ha sido un factor importante en el éxito del proyecto y ahora ha asumido el liderazgo del mismo.

Tengo que dar las gracias a Erik Meijer, que creó Rx cuando estaba en Microsoft. Desde que dejó esa empresa, tuve la oportunidad de colaborar con él en Netflix en RxJava, y ahora tengo la suerte de trabajar directamente con él en Facebook. Considero un verdadero honor poder pasar tantas horas en una pizarra con él discutiendo y aprendiendo. Supone una gran diferencia tener un mentor como Erik que eleve el nivel de pensamiento.

Por el camino también pude hablar en muchas conferencias sobre RxJava y la programación reactiva, y a través de ese proceso conocí a mucha gente que me ha ayudado a aprender mucho más sobre código y arquitectura de lo que nunca habría aprendido por mi cuenta.

Netflix fue fenomenal a la hora de apoyar mi tiempo y mis esfuerzos en el proyecto, así como a la hora de proporcionar apoyo para la documentación técnica que nunca habría podido escribir por mí mismo. Un código abierto de esta madurez y alcance no tiene éxito sin poder hacerlo durante tu "trabajo diario" y con la implicación de muchas personas con diferentes habilidades.

El primer capítulo es mi intento de presentar por qué la programación reactiva es un enfoque de programación útil, y cómo RxJava en particular proporciona una implementación concreta de esos principios.

El resto del libro está escrito por Tomasz, que ha hecho un trabajo increíble. Tuve la oportunidad de revisar y aportar sugerencias, pero éste es su libro, y él enseñará los detalles a partir del Capítulo 2.

Nota de Tomasz Nurkiewicz

Conocí RxJava alrededor de 2013 mientras trabajaba para una institución financiera. Trabajábamos con grandes flujos de datos de mercado procesados en tiempo real. Por aquel entonces, la canalización de datos consistía en Kafka para la entrega de mensajes, Akka para el procesamiento de operaciones, Clojure para la transformación de datos y un lenguaje personalizado para propagar los cambios por todo el sistema. RxJava era una opción muy convincente porque tenía una API uniforme que funcionaba muy bien para diferentes fuentes de datos.

Con el tiempo, probé la programación reactiva en más escenarios para los que la escalabilidad y el rendimiento eran esenciales. Implementar sistemas de forma reactiva es, sin duda, más exigente, pero los beneficios son mucho más importantes, como una mejor utilización del hardware y, por tanto, un ahorro de energía. Para apreciar plenamente las ventajas de este modelo de programación, los desarrolladores deben disponer de herramientas relativamente fáciles de usar. Creemos que las extensiones reactivas se encuentran en el punto óptimo entre abstracción, complejidad y rendimiento.

Este libro cubre RxJava 1.1.6, a menos que se indique lo contrario. Aunque RxJava es compatible con Java 6 y versiones posteriores, casi todos los ejemplos utilizan la sintaxis lambda de Java 8. Algunos ejemplos del capítulo en el que hablamos de Android(Capítulo 8) muestran cómo tratar con la sintaxis verbosa previa a las expresiones lambda. Dicho esto, no siempre utilizamos la sintaxis más corta posible (como las referencias a métodos) para mejorar la legibilidad cuando tiene sentido.

Navegar por este libro

El libro se ha estructurado de forma que puedas aprovecharlo al máximo si lo lees de principio a fin. Sin embargo, si no puedes dedicarle tanto tiempo, no dudes en seleccionar sólo las partes que te resulten más interesantes. Si hay algún concepto que se haya introducido antes, lo más probable es que encuentres una referencia a él. A continuación se ofrece una visión general de cada capítulo:

  • El Capítulo 1 repasa muy brevemente los inicios de RxJava, los conceptos básicos y las ideas(Ben).

  • El Capítulo 2 explica cómo puede aparecer RxJava en tu aplicación y cómo interactuar con él. Este capítulo es muy básico, pero entender conceptos como fuentes calientes frente a frías es tremendamente importante(Tomasz).

  • El Capítulo 3 es una visita relámpago a los numerosos operadores que proporciona RxJava. Te presentaremos las expresivas y potentes funciones que constituyen la base de esta biblioteca(Tomasz).

  • El Capítulo 4 es más práctico y muestra cómo integrar RxJava en varios lugares de tu código base. También aborda la concurrencia(Tomasz).

  • El capítulo 5 es avanzado y explica cómo implementar aplicaciones reactivas de arriba abajo(Tomasz).

  • El Capítulo 6 explica un importante problema de control de flujo y los mecanismos de contrapresión en RxJava que lo soportan(Tomasz).

  • El capítulo 7 muestra técnicas de pruebas unitarias, mantenimiento y resolución de problemas de aplicaciones basadas en Rx(Tomasz).

  • El capítulo 8 muestra algunas aplicaciones seleccionadas de RxJava, especialmente en sistemas distribuidos(Tomasz).

  • El Capítulo 9 destaca los planes futuros para RxJava 2.x(Ben).

Recursos en línea

Todos los diagramas de mármol de este libro están tomados de la documentación oficial de RxJava publicada bajo la Licencia Apache Versión 2.0.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este icono significa un consejo, sugerencia o nota general.

Nota

Este icono significa una nota general.

Advertencia

Este icono indica una advertencia o precaución.

Safari® Libros en línea

Nota

Safari Books Online es una biblioteca digital a la carta que ofrece contenido experto, tanto en forma de libro como de vídeo, de los autores más destacados del mundo en tecnología y empresa.

Los profesionales de la tecnología, los desarrolladores de software, los diseñadores web y los profesionales empresariales y creativos utilizan Safari Books Online como recurso principal para la investigación, la resolución de problemas, el aprendizaje y la formación en certificación.

Safari Books Online ofrece una gama de planes y precios para empresas, administraciones públicas, educación y particulares.

Los miembros tienen acceso a miles de libros, vídeos de formación y manuscritos previos a la publicación en una base de datos en la que se pueden realizar búsquedas completas, de editoriales como O'Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology y cientos más. Para más información sobre Safari Books Online, visítanos en Internet.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/reactive-prog-with-rxjava.

Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a

Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://www.youtube.com/oreillymedia

Agradecimientos

De Ben

Este libro no existiría sin Tomasz, que escribió la mayor parte, y Nan Barber, nuestra editora, que fue increíblemente útil y paciente para llevarnos hasta el final. ¡Gracias Tomasz por responder a mi mensaje en Twitter buscando un autor y hacer realidad este libro!

También estoy muy agradecido por el apoyo que Netflix Open Source y Daniel Jacobson me han prestado a mí personalmente y al proyecto en general a lo largo de los años. Fueron grandes patrocinadores del proyecto y de la inmensa cantidad de tiempo que dediqué a la comunidad. Muchas gracias.

Y gracias Erik por crear Rx, por enseñarme tanto y por tomarte el tiempo de escribir el prólogo de este libro.

De Tomasz

Ante todo, quiero dar las gracias a mis padres, que me regalaron mi primer ordenador hace casi 20 años (486DX2 con 8 MB de RAM: eso nunca se olvida). Así empezó mi andadura con la programación. Varias personas han contribuido a la elaboración de este libro. Empezando por Ben, que accedió a escribir el primer y el último capítulo, así como a revisar mi contenido.

Hablando de revisores, Venkat Subramaniam puso mucho empeño en estructurar este libro de forma coherente y con sentido. A menudo sugirió un orden diferente de frases, párrafos y capítulos, o incluso la eliminación de páginas enteras de contenido irrelevante. Nuestro otro revisor fue el extremadamente entendido y experimentado Dávid Karnok, que, como jefe de proyecto de RxJava, detectó docenas de errores, condiciones de carrera, incoherencias y problemas. Como director del proyecto RxJava, detectó docenas de errores, condiciones de carrera, incoherencias y otros problemas. Ambos revisores aportaron cientos de comentarios que mejoraron notablemente la calidad de este libro. En las primeras fases de este libro, muchos de mis colegas leyeron el manuscrito y también aportaron comentarios muy valiosos. Me gustaría dar las gracias a: Dariusz Baciński, Szymon Homa, Piotr Pietrzak, Jakub Pilimon, Adam Wojszczyk, Marcin Zajączkowski y Maciej Ziarko.

Get Programación Reactiva con RxJava now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.