Por um codigo melhor - II

1. Exceptions são um fluxo à parte e não o principal. Mas que espécie de dica é essa? Todo mundo já sabe disso, o nome já explica, ora bolas. É, explica, mas não impede ninguém de escrever algo assim:
public int foo(int num) {Estranho porque o fluxo que realiza a operação é tratado como secundário, à parte, ele é quem faz parte do desvio e não a exception. Esse exemplo - lembre-se, sou péssimo para exemplos - pode não parecer tão ruim, mas experimente lidar com mais de uma exception dessa maneira para vermos no que acontece:
if(num > 50) {
//faz um monte de coisas complicadas com num
//até chegar a um "resultado"
return resultado;
}
throw new IllegalArgumentException("num deve ser maior do que 50");
}
public int foo(int num) {Agora sim é possível perceber o problema com esse tipo de abordagem. Afinal, a grande questão é, porque as pessoas cometem esse tipo de erro? Pergunta retórica apenas. Exceptions, claro, devem ser tratadas em fluxos à parte, ou seja, se uma pré-condição não for satisfeita, uma exception devem ser lançada:
if(num > 50) {
if(num%2 == 0) {
// faz um monte de coisas complicadas com num
// até chegar a um "resultado"
return resultado;
}
throw new IllegalArgumentException("num deve ser par");
}
throw new IllegalArgumentException("num deve ser maior do que 50");
}
public int foo(int num) {Se vc ainda não se convenceu a escolher a segunda abordagem, experimente colocar uma nova pré-condição em cada um dos trechos e veja em qual faz isso de modo mais prático. Hoje, mesmo que ainda precise falar outras coisas sobre exception, fica apenas essa dica.
// eu sei que não é assim, mas o maldito do blogger não sabe!
if(num menorOuIgual 50) {
throw new IllegalArgumentException("num deve ser maior do que 50");
}
if(num%2 != 0) {
throw new IllegalArgumentException("num deve ser par");
}
// faz um monte de coisas complicadas com num
// até chegar a um "resultado"
return resultado;
}
valeuz...
0 Comentarios:
Postar um comentário
<< Home