Se o estado do objeto é inválido, devo lançar uma exceção ou retornar nulo?
6 respostas
Thiago_Senna
Olá Guj’s!
Tenho uma pequena dúvida. Tenho uma classe Aluno que calcula a idade do mesmo dependendo de sua data de nascimento. Como o nascimento não é um campo obrigatório, não sei se é mais elegante retornar nulo ou lançar uma exceção caso o atributo nascimento esteja nulo. Segue abaixo um exemplo do código:
publicclassAluno{privateLongid;privateStringnome;privateDatenascimento;privateSexosexo;// setters and getterspublicIntegergetIdade(){Calendarhoje=newGregorianCalendar();Calendarnasc=newGregorianCalendar();nasc.setTime(nascimento);Integeridade=hoje.get(Calendar.YEAR)-nasc.get(Calendar.YEAR);if(hoje.get(Calendar.MONTH)<nasc.get(Calendar.MONTH)){idade=idade-1;}returnidade;}}
IMHO acho essa situação delicada. Na view por exemplo, se lançar uma exceção ia aparecer um stack trace na cara do usuário, mas se retornar nulo, a minha camada de negócio teria que ficar checando se o valor retornado pelo método getIdade é igual a nulo.
Se conseguir processar, devolve idade com o valor correto, senão lança null. Sobre a classe de negócios ter que ficar verificando toda hora o se é nulo, não tem muito o que se fazer, a não ser que você devolva outro tipo de dado(tipo String) e inicialize com um valor que não vá afetar outras partes do programa(no caso "").
Deu para ajudar?
Até!
luis.soares
Olá !
Considere que se não há uma entrada válida para o sistema, isto deve ser tratado. Retornar null, neste caso pode não ocasionar maiores problemas além da classe de negócio ter que controlar isso. Mas de maneira geral, o ideal é tratar como exceção. Não que esta tenha que ser exibida ao usuário, mas deve ser tratada. Em muitas situações, um retorno nulo acarreta problemas na aplicação no fluxo do processo.
Abraço.
Thiago_Senna
humm, não era bem essa a minha dúvida.. vou tentar exemplificar melhor..
Eu não sou muito fã de 'silenciar' a exceção utilizando o try catch. IMHO, deve definir um padrão onde, ou lanço a exceção ou retorno nulo se nascimento estiver nulo.
Thiago_Senna
luis.soares:
Olá !
Mas de maneira geral, o ideal é tratar como exceção. Não que esta tenha que ser exibida ao usuário, mas deve ser tratada. Em muitas situações, um retorno nulo acarreta problemas na aplicação no fluxo do processo.
Abraço.
Blz, também concordo que retornar nulo acarreta em problemas.
O principal fator de eu me questionar se deveria retornar nulo é por causa da view que chama o método getIdade. Exemplo:
<td><p>${aluno.idade}</p></td>
Se eu retornar nulo, o trecho de código acima se mantém inalterado, mas se lançar uma exceção ficaria assim: