DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 69: Utilize as exceções somente em circunstâncias excepcionais

Evite usar exceções para controle de fluxo comum:

Exceções devem ser usadas apenas para situações inesperadas, e não para controlar o fluxo de um programa.

Exemplo de código problemático: tentar usar uma exceção para finalizar um loop ao ultrapassar os limites de um array.

try {
    int i = 0;
    while (true) {
        System.out.println(array[i++]);
    }
} catch (ArrayIndexOutOfBoundsException e) {
    // Este código encerra o loop quando o índice ultrapassa o tamanho do array
}

Enter fullscreen mode Exit fullscreen mode

Problemas: Esse uso de exceções é ineficiente e confuso. É melhor utilizar uma estrutura de loop adequada.

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

Enter fullscreen mode Exit fullscreen mode

Implicações de design de API:

Uma API bem projetada deve evitar forçar o uso de exceções para o fluxo normal.

Exemplo: a interface Iterator fornece o método hasNext() para verificar se há mais elementos, evitando exceções desnecessárias ao chamar next().

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

Enter fullscreen mode Exit fullscreen mode

Alternativas para métodos dependentes de estado:

Forneça um método separado para testar o estado (hasNext) ou um valor de retorno especial, como null ou um Optional, quando o estado esperado não puder ser atendido.

Top comments (0)