DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 49: Verifique a validade dos parâmetros

Capítulo: Design de Métodos

  • Foco: Usabilidade, robustez e flexibilidade no design de métodos.
  • Cobertura: Tratamento de parâmetros e valores de retorno, design de assinaturas de métodos e documentação.

Item 49: Verifique a Validade dos Parâmetros

- Restrições em Parâmetros:

  • Métodos e construtores geralmente possuem restrições sobre os valores dos parâmetros (ex.: índices não negativos, referências não nulas).
  • Essas restrições devem ser documentadas e verificadas no início do método.

- Importância da Verificação:

  • Detectar erros o mais cedo possível para evitar falhas inesperadas ou comportamento incorreto no método.
  • Métodos que não verificam seus parâmetros podem causar falhas difíceis de depurar.

- Documentação das Exceções:

  • Use a tag Javadoc @throws para documentar exceções lançadas em caso de violação de restrições.
  • Exceções comuns: IllegalArgumentException, IndexOutOfBoundsException, NullPointerException.

Exemplo de Verificação de Parâmetro:

public static int mod(int x, int y) {
    if (y <= 0) {
        throw new IllegalArgumentException("Divisor deve ser positivo.");
    }
    return x % y;
}

Enter fullscreen mode Exit fullscreen mode

- Uso de Objects.requireNonNull:

  • Introduzido no Java 7, é usado para verificar nulidade de objetos.
  • Retorna o valor passado após a verificação:
this.m = Objects.requireNonNull(m, "Parâmetro 'm' não pode ser nulo");

Enter fullscreen mode Exit fullscreen mode

- Verificação de Ranges (Java 9):
Métodos checkFromIndexSize, checkFromToIndex, e checkIndex para verificar índices em listas e arrays.
Menos flexíveis, usados principalmente para coleções.

- Verificação de Parâmetros em Métodos Não Públicos:
Para métodos não exportados, use assertions para verificar parâmetros:

assert x > 0 : "Valor de x deve ser positivo";

Enter fullscreen mode Exit fullscreen mode

- Casos Especiais:

  • Construtores devem sempre verificar a validade dos parâmetros armazenados para uso posterior.
  • Exceções podem ser feitas para verificações custosas, onde a verificação é implícita durante o cálculo.

- Exemplo de Verificação Implícita:

  • Collections.sort(List) assume que os objetos são mutuamente comparáveis. A verificação ocorre durante o processo de ordenação.

- Tradução de Exceções:

  • Quando a verificação implícita lança a exceção errada, use a "tradução de exceção" para lançar a exceção correta.

- Flexibilidade nas Restrições:

  • Métodos devem ser projetados para ser o mais gerais possível, impondo o mínimo de restrições necessárias.

- Conclusão:

  • Documente e implemente verificações de validade de parâmetros em métodos e construtores. A prática é fundamental para evitar erros futuros e facilitar a depuração.

Exemplos do livro:

Image description

Image description

Image description

Top comments (0)