Item 54 - Retorne coleções ou arrays vazios, em vez de nulos
Java Efetivo (livro)
Posted on September 12, 2024
Problema:
Métodos que retornam null em vez de coleções ou arrays vazios exigem código extra do cliente para tratar a situação.
Risco de Erro:
Se o programador esquecer de tratar o retorno null, o código pode falhar em cenários não previstos, tornando o software mais suscetível a erros.
Argumento de Desempenho:
Embora alguns defendam que retornar null evita a alocação de coleções ou arrays vazios, esse argumento é falho:
- Desempenho só deve ser uma preocupação se houver evidências concretas de que a alocação de coleções vazias afeta o sistema.
- É possível retornar coleções e arrays vazios imutáveis repetidamente sem custo de alocação.
Solução:
Retornar coleções ou arrays vazios, imutáveis e reutilizáveis, evita a necessidade de lidar com null e simplifica o código cliente, além de ser eficiente.
Exemplos de Código:
Exemplo de código problemático retornando null:
public List<Cheese> getCheeses() {
if (cheesesInStock.isEmpty()) {
return null;
}
return new ArrayList<>(cheesesInStock);
}
// O cliente precisa lidar com o valor null:
List<Cheese> cheeses = shop.getCheeses();
if (cheeses != null && !cheeses.isEmpty()) {
// processar queijos
}
Solução: Retornar uma lista vazia em vez de null:
public List<Cheese> getCheeses() {
if (cheesesInStock.isEmpty()) {
return Collections.emptyList();
}
return new ArrayList<>(cheesesInStock);
}
// O cliente não precisa mais lidar com o valor null:
List<Cheese> cheeses = shop.getCheeses();
if (!cheeses.isEmpty()) {
// processar queijos
}
Exemplo de código usando um array vazio:
private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];
public Cheese[] getCheesesArray() {
if (cheesesInStock.isEmpty()) {
return EMPTY_CHEESE_ARRAY;
}
return cheesesInStock.toArray(new Cheese[0]);
}
Conclusão:
Nunca retorne null em vez de coleções ou arrays vazios. Isso simplifica o código, evita erros e, na maioria dos casos, não afeta o desempenho de forma significativa.
Posted on September 12, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 28, 2024