Eu uso exceções para detectar problemas mais cedo. Por exemplo:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
Meu programa nunca deve passar null
nessa função. Eu nunca pretendo. No entanto, como todos sabemos, coisas indesejadas acontecem na programação.
Lançar uma exceção, se esse problema ocorrer, permite que eu o localize e corrija antes que cause mais problemas em outros locais do programa. A exceção interrompe o programa e me diz "coisas ruins aconteceram aqui, corrija-as". Em vez disso, null
mudar o programa causando problemas em outros lugares.
Agora, você está certo. Nesse caso, null
isso simplesmente causaria uma NullPointerException
imediata, portanto pode não ser o melhor exemplo.
Mas considere um método como este, por exemplo:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Nesse caso, a null
como o parâmetro seria passado ao redor do programa e poderá causar erros muito mais tarde, o que dificilmente será rastreado até sua origem.
Alterando a função da seguinte maneira:
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Permite identificar o problema muito antes que ele cause erros estranhos em outros lugares.
Além disso, uma null
referência como parâmetro é apenas um exemplo. Pode haver muitos tipos de problemas, de argumentos inválidos a qualquer outra coisa. É sempre melhor identificá-los mais cedo.
Portanto, minha pergunta é simples: essa é uma boa prática? Meu uso de exceções como ferramentas de prevenção de problemas é bom? É uma aplicação legítima de exceções ou é problemática?