DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

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

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more