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.
Top comments (0)