Finalmente puede declarar variables locales de tipo inferido en Java con var: aquí está el por qué es increíble

¡Hola a todos! En este artículo, discutiré las nuevas características de Java 10. Específicamente, voy a hablar sobre probablemente la más popular y útil: la introducción de la palabra clave var en Java. Bueno, en realidad no es una palabra clave, pero te lo contaré más adelante.

Por fin ...

Finalmente, Java ha obtenido la palabra clave var para declarar variables locales. Esto le permite declarar una variable sin su tipo. Por ejemplo, en lugar de hacer esto:

String str = “Java”

ahora puedes decir esto:

var str = “Java”.

Puede que esto no parezca mucho para ganar cuando declaras una variable String o int, pero piensa en tipos complejos con genéricos, por ejemplo. Esto seguramente ahorrará mucho escribir y también mejorará la legibilidad del código.

Un poco de historia

Los desarrolladores de Java se han quejado durante mucho tiempo del código repetitivo y las ceremonias involucradas al escribir código. Muchas cosas que toman solo 5 minutos en lenguajes como Python, Groovy o JavaScript pueden tomar más de 30 minutos en Java debido a su verbosidad.

Si ha codificado en Scala, Kotlin, Go, C # o cualquier otro lenguaje JVM, entonces sabrá que todos tienen algún tipo de inferencia de tipo de variable local ya incorporada en el lenguaje.

Por ejemplo, JavaScript tiene let y var , Scala y Kotlin tienen var y val , C ++ tiene auto , C # tiene var y Go lo admite mediante una declaración con el operador : = .

Hasta Java 10, Java era el único lenguaje que no tenía inferencia de tipo de variable local ni soporte para la palabra clave var.

Aunque la inferencia de tipos se mejoró mucho en Java 8 con la introducción de la expresión lambda, las referencias de métodos y los flujos, las variables locales aún debían declararse con el tipo adecuado. ¡Pero eso ya se ha ido! Java 10 tiene una característica, JEP 286: Inferencia de tipo de variable local , que permitirá declarar variables locales sin información de tipo y simplemente usando la palabra clave var.

Miremos más de cerca.

Ejemplos de palabras clave var de Java 10

A continuación, se muestran algunos ejemplos de la palabra clave var de Java 10:

var str = "Java 10"; // infers String 
var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream

Como dije, en este punto es posible que no comprenda completamente lo que var está haciendo por usted. Pero mira el siguiente ejemplo:

var list = List.of(1, 2.0, "3")

Aquí, la lista se inferirá en la Lista t; .. >> que es un tipo de intersección, pero no tendrá que escribir la información completa del tipo. var hace que el código sea mucho más fácil de escribir y leer en este caso.

En la siguiente sección, veremos algunos ejemplos más que lo ayudarán a aprender a escribir código conciso usando var en Java 10.

Escribir código conciso usando la palabra clave var en Java

El uso de la palabra de reserva var también hace que su código sea conciso al reducir la duplicación, por ejemplo, el nombre de la clase que aparece tanto en el lado derecho como en el izquierdo de las asignaciones, como se muestra en el siguiente ejemplo:

ByteArrayOutputStream bos = new ByteArrayOutputStream();

Aquí ByteArrayOutputStream se repite dos veces, y podemos eliminar eso usando la función var de Java 10 como se muestra a continuación:

var bos = new ByteArrayOutputStream();

Podemos hacer cosas similares mientras usamos sentencias try-with-resource en Java, por ejemplo, esto

try (Stream data = dbconn.executeQuery(sql)) { return data.map(...) .filter(...) .findAny(); }

se puede escribir de la siguiente manera:

try (var books = dbconn.executeQuery(query)) { return books.map(...) .filter(...) .findAny(); }

Estos son solo algunos ejemplos. Hay muchos lugares donde puedes usar var para hacer tu código más conciso y legible, muchos de los cuales puedes ver en el curso Pluarlsight de Sander Novedades en Java 10 .

Es un curso pago, pero puedes consultar esta prueba gratuita de 10 días.

Para aquellos programadores que han usado Groovy o Scala, la introducción de var hace que parezca que Java va por el camino de Scala… pero solo el tiempo lo dirá.

Por ahora, podemos estar felices de que var facilite la declaración de una variable local compleja en Java 10.

Y tenga en cuenta: la inferencia del tipo de variable local de la palabra clave var de Java 10 solo se puede usar para declarar variables locales (por ejemplo, cualquier variable dentro del cuerpo del método o bloque de código).

¿Puedes usar var para declarar variables miembro en Java?

No puede usar var para declarar variables miembro dentro de la clase, parámetros formales de métodos o tipos de métodos de retorno.

Por ejemplo, este ejemplo de var está bien:

public void aMethod(){ var name = "Java 10"; } 

Pero, el siguiente ejemplo NO ESTÁ BIEN:

class aClass{ var list; // compile time error }

Por lo tanto, aunque esta nueva característica de Java 10 es llamativa y se ve bien, todavía tiene un largo camino por recorrer. Aún así, puede comenzar a usarlo para simplificar aún más su código. Menos código repetitivo siempre significa un código mejor y más legible.

Puntos importantes sobre esta nueva palabra clave var

Ahora que sabe que puede declarar variables locales sin declarar el tipo en Java 10, es hora de aprender algunas cosas importantes sobre esta función antes de comenzar a usarla en su código de producción:

1. Esta función está construida bajo JEP 286: Inferencia de tipo de variable local y fue creada por nada menos que Brian Goetz. Es el autor de Java Concurrency in Practice, uno de los libros más populares para desarrolladores de Java.

2. La palabra clave var permite la inferencia del tipo de variable local, lo que significa que el compilador inferirá el tipo de la variable local. Ahora no es necesario declararlo.

3. La inferencia de tipo de variable local o la palabra clave var de Java 10 solo se puede usar para declarar variables locales , por ejemplo, métodos internos, en el bloque de código de inicializadores, índices en el bucle for mejorado, expresiones lambda y variables locales declaradas en un bucle for tradicional. .

No puede usarlo para declarar variables formales y tipos de métodos de retorno, para declarar campos o variables miembro, en variables formales de constructor y cualquier otro tipo de declaración de variable.

4. A pesar de la introducción de var, Java sigue siendo un lenguaje de tipado estático y debe haber suficiente información para inferir el tipo de variable local. Si no, el compilador arrojará un error.

5. La palabra clave var es similar a la palabra clave auto de C ++, var de C #, JavaScript, Scala, Kotlin, def de Groovy y Python (hasta cierto punto), y el operador: = del lenguaje de programación Go.

6. Una cosa importante que debe saber es que, aunque var parece una palabra clave, en realidad no es una palabra clave. En cambio, es un nombre de tipo reservado. Esto significa que el código que usa var como variable, método o nombre de paquete no se verá afectado.

7. Otra cosa a tener en cuenta es que el código que usa var como nombre de clase o interfaz se verá afectado por este cambio de Java 10. Pero como dice JEP, estos nombres son raros en la práctica, ya que violan las convenciones de nomenclatura habituales.

8. El equivalente inmutable de las variables locales o las variables finales val y let aún no es compatible con Java 10.

Terminando

¡Eso es todo sobre la var en Java 10! Es una característica interesante de Java 10, que le permite declarar variables locales sin declarar su tipo. Esto también ayudará a los desarrolladores de Java a aprender otros lenguajes rápidamente, como Python, Scala o Kotlin, porque usan mucho var para declarar variables mutables y val para declarar variables locales inmutables.

Aunque JEP 286: Inferencia de tipo de variable local solo admite var y no val , sigue siendo útil y se parece más a codificar Scala en Java.

Aprendizaje adicional

Novedades de Java 10 de Sander Mak

Directrices de estilo para la inferencia de tipo de variable local en Java

JEP 286: Inferencia de tipo de variable local

10 cosas que los desarrolladores de Java deben aprender en 2018

La MasterClass completa de Java para aprender Java mejor

Gracias por leer este artículo. Si le gusta esta nueva función de Java 10, compártala con sus amigos y colegas.

Si tiene alguna pregunta o comentario, envíe una nota y permanezca atento a más tutoriales y artículos de Java 10 aquí.

Publicado originalmente en javarevisited.blogspot.com el 27 de marzo de 2018.