La palabra reservada var en Java representa una forma moderna y cómoda de declarar variables sin necesidad de especificar explícitamente su tipo. Esta característica fue introducida en Java 10 y está disponible en todas las versiones LTS recientes, como la 11, 17 o 21. Su principal ventaja es que el compilador se encarga de inferir automáticamente el tipo de la variable a partir del valor que le asignamos, lo que nos permite escribir un código más limpio y conciso.
El proceso de inferencia de tipos con var funciona de manera sencilla: cuando declaramos una variable con var, el compilador analiza el valor que le asignamos y determina el tipo adecuado. Por ejemplo, si escribimos var k = 10;, el compilador infiere que k es de tipo int. Si en cambio asignamos un valor decimal como 10.0, el tipo inferido será double. Esto también funciona con objetos, como cuando hacemos var r = new Random();, donde r será de tipo Random. Así, var nos permite evitar repetir tipos que ya están claros en la asignación, facilitando la escritura y lectura del código.
Es importante aclarar que var no es una palabra clave en Java, sino un nombre reservado. Esto significa que no podemos usar var como identificador para variables en contextos donde se espera una declaración con inferencia de tipos, pero sí podría existir una variable llamada var en código antiguo, lo que explica por qué no se trata como una palabra clave tradicional. Por ejemplo, el editor no resaltará var hasta que comencemos a escribir el nombre de la variable, porque el lenguaje necesita saber si realmente estamos declarando una variable o simplemente usando un identificador llamado var.
Sin embargo, el uso de var tiene ciertas limitaciones. No podemos usarlo para declarar campos o atributos a nivel de clase, ya que en esos casos el tipo debe estar explícito y conocido en tiempo de compilación. Por ejemplo, no es válido escribir:
var hora = LocalTime.now(); // Esto no es válido a nivel de clase
En cambio, var solo puede usarse para variables locales dentro de métodos o bloques.
Además, hay restricciones dentro del ámbito local. No podemos declarar una variable con var sin inicializarla, ni asignarle un valor null directamente, porque el compilador no puede inferir el tipo a partir de null. Tampoco es posible declarar varias variables en la misma línea usando var, ya que la inferencia requiere una asignación clara para cada variable.
Otro caso donde var no funciona es con tipos especiales como expresiones lambda o referencias a métodos. Por ejemplo, intentar asignar una referencia a un método con var no es válido:
var metodo = System.out::println; // No permitido
Para estos casos, debemos declarar explícitamente el tipo funcional, como Function o BiFunction, especificando los parámetros y el tipo de retorno.
En general, mientras usemos var para variables locales con una asignación clara y un tipo inferible, podemos aprovechar esta característica para hacer nuestro código más legible y menos verboso. No obstante, debemos evaluar cuándo es mejor usar var y cuándo es preferible declarar el tipo explícitamente, especialmente para mantener la claridad del código en situaciones donde el tipo no es evidente o la inferencia podría restar legibilidad.
Con estas consideraciones, podemos aplicar var en nuestros proyectos con versiones modernas de Java, simplificando la declaración de variables y haciendo que nuestro código sea más limpio y conciso.