Texto de: Geraldo Daros
Introdução
Em 2020, com a chegada do Java 14, uma nova funcionalidade foi introduzida na linguagem: os Records. Essa adição foi recebida com entusiasmo pela comunidade, ao trazer uma maneira mais simples e concisa de declarar classes, primariamente utilizadas para transportar dados, também conhecidas como classes de valor.
Definição e Propósito
Records são uma forma especial de classe em Java, destinada a simplificar a criação de classes de valor. Uma classe de valor é uma classe usada principalmente para agrupar e transportar dados. Antes dos Records, criar uma classe de valor envolvia a definição manual de campos, construtores, métodos equals()
, hashCode()
, e toString()
. Com Records, esses componentes são gerados automaticamente, reduzindo significativamente a verbosidade do código.
Sintaxe
A declaração de um Record em Java é simples e concisa. Aqui está um exemplo básico de como definir um Record:
public record Person(String name, int age) {}
Neste exemplo, o Record Person
tem dois campos: name
e age
. O compilador Java gera automaticamente os seguintes componentes para este Record:
- Um construtor público que aceita todos os campos como parâmetros.
- Métodos de acesso (getters) para cada campo, são nomeados apenas com o nome do atributo, nesse caso, person.name() seria a forma para acessar o método getter do atributo name.
- Implementações de
equals()
,hashCode()
, etoString()
.
Um record não possui construtor sem argumentos e nem setters, o que está de acordo com o seu objetivo de agrupar e transportar dados.
Características e Vantagens
Imutabilidade
Uma das principais características dos Records é que eles são implicitamente finais e imutáveis. Os campos de um Record são finais, o que significa que, uma vez inicializados, seus valores não podem ser alterados. Isso garante que os objetos de Record sejam imutáveis por padrão, promovendo a segurança e a consistência dos dados.
Redução de Código Boilerplate
Antes dos Records, criar uma classe de valor em Java envolvia a escrita repetitiva de código boilerplate. Com Records, o desenvolvedor pode evitar esse esforço, focando apenas nos dados que a classe deve transportar. Isso não apenas economiza tempo, mas também torna o código mais legível e menos propenso a erros.
Exemplo Prático
Vamos pôr a mão na massa e ver como os Records funcionam! Primeiro de tudo, vamos criar um Record Animal:
public record Animal(String name, String species, int age) {}
Este Record pode ser usado da seguinte forma:
public class Main {
public static void main(String[] args) {
Animal animal = new Animal("Leo", "Lion", 5);
// Acessando os campos
String name = animal.name();
String species = animal.species();
int age = animal.age();
// Imprimindo o Animal
System.out.println(animal); // Output: Animal[name=Leo, species=Lion, age=5]
// Comparando Animais
Animal anotherAnimal = new Animal("Leo", "Lion", 5);
System.out.println(animal.equals(anotherAnimal)); // Output: true
System.out.println(animal == anotherAnimal); // Output: false
}
}
Neste exemplo, o Record Animal
encapsula os dados name
, species
e age
. O uso deste Record demonstra a simplicidade na criação e manipulação de objetos de valor em Java.
Conclusão
Os Records representam um passo significativo na evolução do Java, oferecendo uma maneira moderna e eficiente de trabalhar com classes de valor. Eles reduzem a verbosidade do código, promovem a imutabilidade e melhoram a legibilidade e manutenção do código. Se você ainda não explorou os Records, é um bom momento para começar a utilizá-los em seus projetos Java e aproveitar os benefícios dessa poderosa funcionalidade. Os Records não só simplificam o desenvolvimento, mas também ajudam a escrever código mais limpo e seguro, refletindo as melhores práticas de programação.