Java 22: Padrões e variáveis sem nome
No desenvolvimento de software é bem capaz que você já tenha passado por situações onde foi forçado a declarar uma variável, mesmo não utilizando elas, isso porque, no caso do Java, se você não declarar, o compilador irá acusar de erro. Por exemplo em: parâmetros locais, parâmetros de funções lambda, variáveis de exceções e etc;
Para resolver esse problema, o Java 22 trouxe uma novidade bem interessante: Unnamed Variables & Patterns, que em tradução literal seria “Variáveis e Padrões Sem Nome”.
Tratamento de Exceções
O exemplo abaixo mostra um código de tratamento de exceção, onde a variável da exceção não está sendo utilizada:
String valor1 = "vinicius";
try{
Integer.parseInt(valor1);
}catch (Exception ex){
System.out.println("Não foi possível realizar a conversão para Int");
}
Neste exemplo, tentamos converter uma String
para int
. Quando isso não é possível, uma exceção é lançada. Embora o código funcione, a variável ex
não está sendo utilizada. Para melhorar a clareza do código, podemos utilizar “Unnamed Variables & Patterns”, que nos permite empregar o operador _
para substituir a variável não utilizada, como demonstrado a seguir:
String valor1 = "vinicius";
try{
Integer.parseInt(valor1);
}catch (Exception _){
System.out.println("Não foi possível realizar a conversão para Int");
}
Dessa forma, reduzimos a “complexidade” e deixamos o código mais claro, evitando variáveis sem uso.
Funções Lambdas
Outro caso de uso é ao trabalhar com funções lambda. Veja o exemplo abaixo, onde a variável name
não é utilizada no processamento:
List<String> names = List.of("Vinícius", "Maria Luíza", "Jill");
Map<String, String> students = names.stream()
.collect(Collectors.toMap(
String::toLowerCase,
name -> "MATRICULADO"
));
Nesse caso, o código pode ser simplificado também utilizando o operador _
:
Map<String, String> students = names.stream()
.collect(Collectors.toMap(
String::toLowerCase,
_ -> "MATRICULADO"
));
Assim, a funcionalidade permanece intacta: pegamos a lista, transformamos em um mapa, onde os nomes são as chaves em letras minúsculas, e todos os valores são “MATRICULADO”.
Loops
Um último exemplo é quando utilizamos um laço de repetição e não precisamos do “elemento”. Veja o código abaixo:
String s = "Hello, World!";
int len = 0;
for (char character : s.toCharArray()) {
len++;
}
Esse código pode ser simplificado da seguinte maneira:
String s = "Hello, World!";
int len = 0;
for (char _ : s.toCharArray()) {
len++;
}
Pronto, o comportamento continua o mesmo, apenas sinalizamos que não vamos precisar do character
.
Conclusão
Esses são alguns casos de uso dessa nova funcionalidade. Para mais detalhes, acesse a JEP 456: Unnamed Variables & Patterns.
Como vimos, essa nova funcionalidade oferece diversas vantagens, como a redução da complexidade do código e a eliminação de variáveis não utilizadas. No entanto, acredito que seu uso deve ser moderado, pois, em algumas situações, pode dificultar a legibilidade do código.