Java ha realizado grandes cambios en los últimos años, a medida que fuerzas aparentemente dispares convergieron para hacer que la plataforma fuera más fácil de usar. Nuevas funciones como autocompilar y el palabra clave var baje el listón para el uso de Java, tanto para principiantes como para veteranos. Echemos un vistazo a lo que se está cocinando en este Java nuevo y más amigable.
era
Quizás lo más sorprendente del Java moderno, al menos para los veteranos, es la presencia de var
apoyo. Una de las características que definen a Java es que está fuertemente tipado, pero var
afloja eso un poco. Dentro de un método, ahora puede definir una referencia usando var
donde el compilador realizará un seguimiento del tipo por usted.
Después de mucho lamentarse sobre la conveniencia de introducir esta característica, los desarrolladores de Java de todo el mundo simplemente la han adoptado como si fuera la cosa más obvia. ¿Java no siempre nos dejó hacer esto?
var numbers = new ArrayList<Integer>();
¡No, no fue así!
compilación oculta
Esta nueva característica casi se siente como ejecutar un archivo fuente sin compilarlo, pero lo que sucede bajo el capó es un poco más complicado. El archivo .java todavía está compilado, pero DAR 330 hace que todo esté oculto para ti. Entonces ahora puedes hacer:
$ java HelloWorld.java
En lugar de
$ javac HelloWorld.java
$ java HelloWorld
El corredor compila la fuente en la memoria y ejecuta la primera clase principal que descubre.
JEP 330 está limitado a un único archivo fuente, pero espera, porque aquí viene JEP 458.
Compile automáticamente varios archivos fuente
JEP 458 se une a JEP 330 para permitir a los desarrolladores ejecutar múltiples archivos fuente con compilación oculta. Cuando una fuente Java hace referencia a otra, el iniciador de Java compilará la dependencia en la memoria, la cargará y la proporcionará. En resumen, puede ejecutar programas completos de archivos fuente interrelacionados, siempre que existan juntos en el disco, sin un paso de compilación explícito.
¿Soy yo o Java está evolucionando hacia algo más dinámico? Esto es muy genial.
Una mejor cadena de herramientas de construcción
La introducción al JEP 458 dice que tiene como objetivo:
Mejore el iniciador de aplicaciones Java para poder ejecutar un programa suministrado como varios archivos de código fuente Java. Esto hará que la transición de programas pequeños a programas más grandes sea más gradual, permitiendo a los desarrolladores elegir si tomarse la molestia de configurar una herramienta de compilación y cuándo hacerlo.
Esto dice en lenguaje sencillo que Java está trabajando para simplificar la vida de los desarrolladores a través de mejores compilaciones. La JEP llega incluso a decir que «no es un objetivo facilitar el uso de dependencias de bibliotecas externas en programas de código fuente», aunque «que puede ser objeto de una futura JEP» (cursiva mía).
Entiendo que los desarrolladores de Java están trabajando para hacer que las herramientas sean más fáciles de usar, incluso hasta el nivel de dependencia.¡finalmente! Maven sigue siendo mi herramienta de construcción preferida para proyectos complejos, como lo ha sido durante 15 años, pero la herramienta muestra serios signos de envejecimiento. (¡Un nuevo proyecto de arquetipo en Maven elige Java 1.7 como predeterminado!) Comparado con NPM, Maven es francamente torpe; un impedimento real para que los proyectos despeguen rápidamente, especialmente para los principiantes que tienen que aprender la herramienta de compilación y al mismo tiempo aprender Java.
Un administrador de dependencias ordenado por plataforma podría ser justo lo que necesita. Cuando miro JEP 330 y JEP 458 juntos, no veo tiritas graduales para la usabilidad de las herramientas, sino el cuidadoso despliegue de una cadena de herramientas integrada en la plataforma. Lo que está surgiendo es una cadena de herramientas Java diseñada para facilitar el inicio de un proyecto y adoptar gradualmente herramientas más sofisticadas según sea necesario.
JShell
Lo sé, JShell existe desde hace mucho tiempo, pero reconozcamos lo bueno que es tener un ejecutor estilo REPL para Java. Recuerde utilizar JShell para probar nuevas ideas sobre la marcha.
Servidor web sencillo
Un día nos despertamos y Java tenía un servidor web de línea de comandos. Puede aprenda todo sobre el servidor web simple de Java aquí.
La conclusión clave es: si está utilizando Java 18 o superior, su instalación de JDK ahora incluye una manera sencilla y fácil de entregar archivos. Como resultado, la plataforma Java es un poco más integral, integrada y completa. Anteriormente usé Python o Node para las necesidades básicas de servicio de archivos; Ahora puedo hacerlo todo en Java.
Bloques de texto anidados
Otra característica que los desarrolladores de Java han envidiado durante mucho tiempo en otras plataformas fue una manera fácil de manejar grandes fragmentos de texto en código. JEP 378 trae los bloques de texto que estábamos buscando:
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
No sé ustedes, pero ese bloqueo me da un suspiro de alivio.
Los bloques de texto también pueden anidar comillas libremente:
String html = """
<html>
<body>
<p>Hello, "This is a quote"</p>
</body>
</html>
""";
Grabar clases
El producto de JEP 395, el record
palabra clave, le permite crear un POJO (objeto Java simple y antiguo) sin agregar manualmente captadores, definidores, toString
, equals
y hashcode
métodos como lo haría normalmente. cuando usas record
la plataforma agrega todas esas sutilezas para ti:
class Point {
private final int x;
private final int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
int x() { return x; }
int y() { return y; }
public boolean equals(Object o) {
if (!(o instanceof Point)) return false;
Point other = (Point) o;
return other.x == x && other.y == y;
}
public int hashCode() {
return Objects.hash(x, y);
}
public String toString() {
return String.format("Point[x=%d, y=%d]", x, y);
}
}
Se convierte en:
record Point(int x, int y) { }
El nuevo record
Las clases también permiten una gran personalización, por lo que puedes agregar tanto o tan poco como quieras.
Interruptor nuevo y mejorado
Con JEP 361, Java switch
La sintaxis se volvió más poderosa y más fácil de usar. Esto sucedió de dos maneras: una sintaxis más limpia y la capacidad de usar switch
como expresión y no sólo como declaración.
El switch
ahora hace posible tomar una sintaxis antigua y torpe como esta:
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
Y conviértelo en algo como esto:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
Igualmente sorprendente, puedes usarlo como una expresión para la asignación de variables (que a menudo es todo lo que buscamos, de todos modos):
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
Concurrencia estructurada
Ahora bien, la concurrencia nunca será un área de codificación despreocupada. Hay algo inherentemente alucinante en trabajar con múltiples subprocesos. Sin embargo, la concurrencia estructurada posiblemente le brinde la forma más fácil de manejar la concurrencia en el universo de codificación conocido:
try (var scope = new StructuredTaskScope<Object>()) {
for (int planetId : planetIds) {
scope.fork(() -> getPlanet(planetId)); // fork a “process”
}
scope.join();
} catch (Exception e){
System.out.println("Error: " + e);
}
Cuando se combina con Java nuevos hilos virtuales, la concurrencia estructurada es una superpotencia entre los lenguajes. Ahora puedes usar fácilmente la concurrencia en Java. sin generar subprocesos del sistema operativo, y sin dejando construcciones de programación normales.
Conclusión
Los desarrolladores de plataformas están trabajando en múltiples frentes para bajar el listón para los desarrolladores que trabajan en Java. Están mejorando la vida cotidiana de los programadores que trabajan y haciendo que sea más fácil comenzar a utilizar Java y experimentar con él.
Estos esfuerzos tienen un impacto especial en ese peculiar sector del mundo de los desarrolladores que voy a llamar «creación de prototipos», también conocido como «jugar». Cuanto más podamos hacer para reducir la distancia entre pensar en probar algo y intentarlo realmente, mejor.
Es genial ver a Java en tan buena forma. Me gusta la dirección hacia la que avanza y las personas que lideran esos esfuerzos.
Copyright © 2024 IDG Communications, Inc.