Novedades de Java 13

Escrito por el , actualizado el .
java planeta-codigo programacion
Comentarios

Java

Continuando las mejoras incrementales cada seis meses el 17 de septiembre se publico Java 13. Java 13 incorpora algunas nuevas características interesantes que mejoran un facilitan la lectura del código, entre las más destacadas están los bloques de texto y las expresiones switch mejoradas.

Casi coincidiendo con la publicación de Java 13 se publicado [Jakarta EE][jakarta] 8 que únicamente tiene como novedad que su propiedad ha pasado a estar baja la fundación Eclipse, es totalmente compatible con Java EE 8 y sus últimas mejoras, las novedades vendrán en versiones posteriores de Jakarta EE en las que se dará importancia a la tendencia de las aplicaciones para su funcionamiento en entornos orientados a la nube. Casi al mismo tiempo se ha publicado JavaFX 13 ya fuera del JDK en onde puede seguir su propio ciclo de publicaciones independiente del JDK.

Bloques de texto

Para definir una cadena de caracteres que tuviese varias lineas en Java había que emplear concatenación de cadenas, si esa cadena contiene el caracter comilla doble de inicio de cadena había que escaparlo, si esa cadena contenía saltos de línea había que emplear el caracter de escape de salto de línea \n. El resultado es una cadena con problemas de legibilidad por los caracteres de escape que incluye en el código fuente del lenguaje. Esto podría se al definir una cadena de texto que tuviese elementos HTML o JSON.

1
2
3
4
5
String html = "<html>\n" +
    "   <body>\n" +
    "      <p class=\"text\">Hello, Escapes</p>\n" +
    "   </body>\n" +
    "</html>\n";

Con los bloques de texto se emplean una triple comilla doble para la apertura y cierre de la cadena.

1
2
3
4
5
6
String html = """
    <html>
        <body>
            <p class="text">Hello, Text Blocks</p>
        </body>
    </html>""";

Como ayuda a las cadenas de texto en la clase String se han añadido varios métodos para eliminar la indentación (String::stripIndent), traducir los caracteres secuencia de escape (String::translateEscapes) y formatear una cadena usando un método de instancia (String::formatted).

Expresiones switch mejoradas

En las novedades de Java 12 se añadió la posibilidad de los switch fueran expresiones que retornan un valor en vez de sentencias y se evita el uso de la palabra reservada break.

1
2
3
4
5
6
String numericString = switch(integer) { 
   case 0 -> "zero"; 
   case 1, 3, 5, 7, 9 -> "odd"; 
   case 2, 4, 6, 8, 10 -> "even"; 
   default -> "N/A"; 
};

En Java 13 en vez únicamente el valor a retornar se permite crear bloques de sentencias para cada rama case y retornar el valor con la palabra reservada yield. En los bloques de sentencias puede haber algún cálculo más complejo que directamente retornar el valor deseado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
String numericString = switch(integer) { 
   case 0 -> {
       String value = calculateZero();
       yield value;
   } ; 
   case 1, 3, 5, 7, 9 -> {
       String value = calculateOdd();
       yield value;
   };
   case 2, 4, 6, 8, 10 -> {
       String value = calculateEven();
       yield value;
   };
   default -> {
       String value = calculateDefault();
       yield value;
   };
};

Otras características

Las las otras tres características destacadas Dynamic CDS Archives, ZGC: Uncommit Unused Memory para la mejora del recolector de basura y Reimplement the Legacy Socket API reescribiendo el código para los sockets en lenguaje Java son cambios internos que afectan a la plataforma Java pero no al lenguaje.