DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on • Updated on

Item 54 - Retorne coleções ou arrays vazios, em vez de nulos

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
}

Enter fullscreen mode Exit fullscreen mode

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
}

Enter fullscreen mode Exit fullscreen mode

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]);
}

Enter fullscreen mode Exit fullscreen mode

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)