5 funcionalidades de Java 8 que CAMBIARÁN tu código

 ● 29th Apr 2015

6 min read

 

Java 8 está lleno de funcionalidades, algunas realmente interesantes, tanto al nivel de la JVM como al del lenguaje. Mientras que algunas de las funcionalidades originalmente pensadas para esta versión fueron dejadas afuera o desplazadas para la versión 9, hay literalmente docenas de nuevas funcionalidades. Varias de las adiciones consisten en mejoras no tan visibles, ya sea a nivel del compilador, la JVM o el sistema de ayuda. Por lo tanto, mientras que puede que nos beneficiemos de ellas, no es necesario que hagamos nada en particular (además de instalar Java 8, por supuesto) para utilizarlas.
Habiendo aclarado eso, veamos 5 funcionalidades que creemos que tú definitivamente debes conocer:

1. Expresiones Lambda

Aún cuando no quisimos dejarnos llevar por la corriente aquí, no hay duda de que desde la perspectiva de un desarrollador, la funcionalidad más dominante de Java 8 es el nuevo soporte para expresiones Lambda. Esta adición al lenguaje trae Java al frente de la programación funcional, junto con otros lenguajes funcionales basados en la JVM, tales como Scala y Clojure.
Ya hemos visto en el pasado cómo Java implementó las expresiones Lambda, y hemos comparado esto con el abordaje de Scala. Desde la perspectiva de Java, esta es por lejos una de las mayores adiciones hechas al lenguaje en la última década.
Como mínimo, es recomendable que te familiarices con la sintaxis de Lambda, especialmente en lo que se refiere a operaciones de colecciones y matrices (array), donde las Lambdas han sido fuertemente integradas a las librerías principales del lenguaje. Lo más probable es que comenzarás a ver más y más código del estilo del snippet que aparece más abajo, tanto en el código de tu organización como en el de terceras partes.

OverOps for Java 8

[java]
Map<Person.Sex, List<Person>> byGender =
roster.stream().collect(Collectors.groupingBy(Person::getGender));
[/java]
* Una manera bastante eficiente de agrupar una colección según el valor de un campo de una clase en particular.
2. Operaciones paralelas
Con la adición de las expresiones Lambda a las operaciones de matrices, Java introdujo un concepto clave en el lenguaje de la iteración interna. Esencialmente, como desarrolladores, estamos acostumbrados a usar operaciones de bucle (loop) como una de las expresiones más básicas de la programación, allí arriba con if y else.
La introducción de las expresiones Lambda dio vuelta al paradigma, con la auténtica iteración a través de la colección en la que se aplica una función Lambda, ahora siendo realizada por la propia librería principal (es decir: se trata de una iteración interna).
Puedes pensar en esto como una extensión de iteradores donde la operación de extracción del siguiente artículo de cierta colección en la que se opera, es realizada por un iterador. Una interesante posibilidad abierta por este patrón de diseño es la de hacer posible que operaciones que son realizadas en matrices de longs, tales como el ordenado, filtrado y mapeo puedan ser hechas paralelamente por el framework. En caso de estar manejando código de servidor que está continuamente procesando enormes colecciones, esto puede llevar a conseguir unas mejoras significativas en el rendimiento, requiriendo relativamente poco trabajo de ti.
Aquí aparece el mismo snippet de más arriba, pero ahora usando las nuevas capacidades de procesamiento en paralelo del framework.
[java]
ConcurrentMap<Person.Sex, List<Person>> byGender =
roster.parallelStream().collect(
Collectors.groupingByConcurrent(Person::getGender));
[/java]
* Con un cambio bastante pequeño, se puede hacer que este algoritmo se ejecute en múltiples hilos.

3. Java + JavaScript =

Java 8 está intentando corregir uno de los mayores errores de su historia: la creciente distancia existente entre Java y JavaScript, una que no ha hecho más que incrementarse en los últimos años. Con este nuevo lanzamiento, Java 8 está introduciendo un motor JavaScript de JVM completamente nuevo: Nashorn. Este motor usa muy particularmente algunas de las nuevas funcionalidades presentadas con Java 7, tales como invokeDynamic para proveer velocidad a nivel de la JVM a la ejecución de JavaScript allí junto a motores como V8 y SpiderMonkey.
Esto significa que la próxima vez que busques integrar JS en tu backend, en vez de configurar una instancia de node.js, simplemente puedes usar la JVM para ejecutar el código. La ventaja extra aquí reside en la posibilidad de contar con una interoperabilidad sin interrupciones entre tu código Java y JavaScript durante el proceso, sin necesidad de usar varios métodos IPC/RPC para cubrir intervalos.

4. Nueva API para Date / Time

La complejidad de la actual API para la librería nativa de Java ha causado dolores de cabeza a los desarrolladores Java por varios años. Joda Time ha estado llenando este vacío por largo tiempo, aún con Java 8. Una pregunta que surgió desde temprano en el desarrollo fue por qué Java 8 no incluía a Joda como su framework nativo en este campo. Debido a lo que fue percibido como un defecto de diseño en Joda, Java 8 implementó su propia -y nueva- API para Date y Time desde cero. La buena noticia es que, a diferencia de Calendar.getInstance(), las nuevas API fueron diseñadas buscando la simplicidad, así como operaciones claras para operar en valores manipulados, tanto en formatos legibles para el ser humano como en los de máquina.

5. Acumuladores concurrentes

Uno de los escenarios más comunes en la programación concurrente es la actualización de los contadores numéricos accedidos por múltiples hilos. A lo largo de los años, han existido muchas expresiones para hacer esto, yendo desde bloques sincronizados (que introducen un alto nivel de contención) hasta leer/escribir bloqueos en AtomicInteger(s). Si bien es cierto que los últimos son más eficientes, pues dependen directamente de las instrucciones CAS del procesador, también requieren un mayor grado de familiaridad para poder implementar la semántica requerida adecuadamente.
Con Java 8, este problema está resuelto al nivel del framework, con nuevas clases acumuladoras concurrentes que hacen posible aumentar o reducir el valor de un contador de forma eficiente, con seguridad en los hilos. En este caso no se trata de gustos o preferencias: usar estas nuevas clases en tu código es pan comido.
¿Hay algunas otras funcionalidades del lenguaje que crees que todo desarrollador debería conocer? Inclúyelas en la sección de comentarios que aparece más abajo.
solve-button (1)
OverOps shows you when and why your code breaks in production. It detects caught and uncaught exceptions, HTTP and log errors, and gives you the code and variable state when they happened. Get actionable information, solve complex bugs in minutes. Installs in 5-min. Built for production.

Bug line
5-error-tracking-tools-java-developers-should-know/ – read more

Java 8
Java 8 Exceptions have never been so beautiful – Try OverOps for Java 8

Sign up to OverOps:

Subscribe for Post Updates

We will send you updates about industry trends and more

Please visit our privacy policy for further details about our privacy practices.


Tagged with: spanish

Next Article