Estou me perguntando se devo me defender contra o valor de retorno de uma chamada de método, validando que eles atendam às minhas expectativas, mesmo que eu saiba que o método que estou chamando atenderá a essas expectativas.
DADO
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
EU DEVERIA FAZER
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
OU
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
Estou perguntando isso no nível conceitual. Se eu conheço o funcionamento interno do método que estou chamando. Ou porque eu escrevi ou inspecionei. E a lógica dos possíveis valores que ela retorna atende às minhas pré-condições. É "melhor" ou "mais apropriado" pular a validação ou ainda devo me defender de valores errados antes de prosseguir com o método que estou implementando atualmente, mesmo que sempre seja aprovado.
Minha conclusão de todas as respostas (sinta-se à vontade para vir para o seu próprio país):
Afirme quando- O método demonstrou se comportar mal no passado
- O método é de uma fonte não confiável
- O método é usado em outros lugares e não indica explicitamente suas pós-condições
- O método está próximo ao seu (consulte a resposta escolhida para obter detalhes)
- O método define explicitamente seu contrato com algo como documento adequado, segurança de tipo, teste de unidade ou verificação pós-condição
- O desempenho é crítico (nesse caso, uma declaração do modo de depuração pode funcionar como uma abordagem híbrida)
Null
)? Provavelmente é igualmente problemático se o nome for ""
(não nulo, mas a sequência vazia) ou "N/A"
. Ou você pode confiar no resultado ou precisa ser adequadamente paranóico.