El 14 de septiembre de 2021 fue publicada una nueva versión de Java: Jdk 17. Desde que Oracle decidió crear nuevas versiones del lenguaje aumentando la frecuencia de entrega cada seis meses, los nuevos lanzamientos van añadiendo nuevas funcionalidades al lenguaje que son probadas, pudiendo ser añadidas en la versiones del lenguaje denominadas LTS (Long time support). De este modo, se permite experimentar dentro del lenguaje diferentes mejoras o nuevas implementaciones de manera experimental, de modo que puedan ser validados/ refinados por parte de toda la comunidad de usuario Java existente en todo el mundo.
Las nuevas mejoras serán añadidas o descartadas en la llegada de la versión LTS del lenguaje que se realiza cada dos años desde la fecha de la publicación de la última versión estable. A continuación os mostramos el Roadmap oficial de Oracle donde se pueden observar todas y cada una de las versiones existentes y futuras del lenguaje:
Este hecho hace que muchos de los programadores del lenguaje existentes en toda la comunidad no puedan seguir los avances añadidos al lenguaje, no pudiendo aprovechar todo el potencial que se va añadiendo con la introducción de los nuevos componentes de mejora en todas y cada una de las versiones intermedias hasta llegar a la LTS.
Nuevas funcionalidades añadidas en Jdk 17 que deberías usar en proyectos donde no es posible usar otro lenguaje de la JVM
Dentro de Profile Software Services cuando tenemos que elegir un lenguaje a la hora de desarrollar aplicaciones que pueda correr bajo nuestra querida y amada Java Virtual Machine elegimos Kotlin por su potencia y facilidad a la hora de desarrollar código, permitiendo que tanto programadores que conocen el lenguaje, como desarrolladores que solo conozcan Java puedan sentirse cómodos y seguros escribiendo código menos verboso para sus aplicativos,
No obstante, en nuestra entidad se realizan proyectos para muchos grandes clientes que no quieren aún dar el salto al uso masivo de Kotlin, por lo que el uso de Java es mandatory en todos los desarrollos de la compañía (aquellos que se refieren a plataformas de backend principalmente usando Spring como framework mayoritario).
En este punto intentamos exprimir todas las bondades existentes dentro las nuevas versiones de Java (que las hay) disponibles en Kotlin y que podemos usar dentro de aquellos desarrollos que nos permiten usar la última versión lts del lenguaje: Java 17 que procedemos a enumerar en los siguientes puntos:
- Nuevas clases record: Por fin ya no necesitamos crear esas clases para poder crear dts o bien, usar librerías como Lombok. Los records nos van a proporcionar un constructor público, métodos de lectura para cada campo, la implementación de hashCode, equals y el toString (echamos de menos la función .copy existente en las data class de Kotlin).
- Sealed classes: nuevas clases Java que permiten cubrir una limitación existente en el lenguaje, no permitiendo la extensibilidad de nuestras clases. Uno de los usos más conocidos son la creación de “enumerados híper vitaminados”. Permite definir clases como si fueran enumerados —cuando queremos definir un valor que puede ser de un solo tipo de un conjunto — pero nos permiten que cada elemento de ese enumerado++ sea una clase, con las ventajas que ello conlleva frente a las limitaciones de los clásicos enumerados.
- Nuevos Switch vitaminados: ahora los Switch de Java se pueden definir como sentencias que pueden devolver valores. De este modo podemos asignarlos a una variable:
Del mismo modo, el compilador va a verificar que dentro las comprobaciones realizadas dentro de los cases cubren todos los posibles valores existentes. En caso contrario, nos va a devolver un error en tiempo de compilación (muy útil por ejemplo, al evaluar aquellos lugares del código afectados por los enumerados/sealed classes cuándo definimos nuevos valores dentro de ellos).
- Pattern matching: Java nos permite hacer el casting automático de una variable al usar las palabras reservadas del lenguaje instance of en un if/switch. Para poder comprender mejor esta nueva mejora vamos a utilizar el casting de un Objeto String y ver la manera en la que el código se reduce dependiendo de la sentencia usada:
Sin el uso pattern matching (if)
Con el uso de pattern matching (if)
Con el uso de pattern matching (switch)
Conclusión
Cómo has podido comprobar, Java también ha ido mejorando de manera un poco más lenta frente a lenguajes modernos como pueden ser Kotlin/Scala. No por ello, debemos de renunciar a mejorar nuestro código haciendo uso de todas las nuevas funcionalidades como en Jdk 17 que se van incorporando generando un código más legible y un poco menos verboso. Para ello, te recomendamos seguir muy de cerca todas y cada una de las versiones intermedias de nuestro querido y añejo lenguaje.