Caso eu jogo marcado ou exceção não verificada para a entrada inválida?

Seco:

Eu estou escrevendo um método que esperar alguma entrada. Agora, eu pensei que seria uma boa prática para escrevê-lo de uma forma defensiva (ou seja, a verificação de que a entrada está correta).

Basicamente, a entrada deve ser ok uma vez que há apenas um lugar (de confiança) que usa este método.

Então, minha pergunta é,

  1. É a programação defensiva justificada aqui?
  2. Se assim for, ele deve lançar uma exceção verificada ou não?
ygor :

Basicamente, a entrada deve ser ok uma vez que há apenas um lugar (de confiança) que usa este método.

É grande, que você raciocinar sobre sua função desta forma. Você acabou de definir um contrato para a sua função. Ele diz que esta função espera uma entrada válida. Neste caso, é uma prática muito boa para empregar programação defensiva, lançando uma exceção quando uma entrada inválida é detectada. Essa exceção será detecção extremamente simplificado de chamadores de sua função, que quebrou contrato e chamou a sua função com entrada inválida.

Se você não lançar uma exceção dedicado, que (se você tiver sorte) a sua função pode quebrar, lançando uma exceção técnica genérica, por exemplo, NullPointerExceptionou talvez ArrayIndexOutOfBoundsException. Tais mostra ainda Stacktrace, que algo de errado aconteceu, quando sua função foi chamada. No entanto, você precisa para analisar, "o que" aconteceu. No pior dos casos, a sua função não jogaria qualquer exceção em tudo e "de alguma forma" entrada inválida processo. Seu programa do que mais tarde pode quebrar no local aparentemente não relacionados ou ainda pior caso, ele não quebrar e apresenta resultado errado para o usuário.

É a programação defensiva justificada aqui?

Sim, definitivamente.

Se assim for, ele deve lançar uma exceção verificada ou não?

Verificado vs exceções não verificadas ainda está em curso um debate. Você pode encontrar muitas respostas para esta pergunta em StackOverflow. linguagem Scala só tem exceções não verificadas. Eu pessoalmente prefiro-los também.

E se a sua função espera inválido entrada também?

Tipicamente, estes são funções, que recebem a entrada de humanos. Por exemplo, um formulário de registro do usuário requer senha, que não é muito curto e contém pelo menos um dígito. Neste caso, o "fracasso" é esperada e deve de alguma forma ser codificado em valor de retorno da função, de modo que chamador da função é obrigado a inspecionar ambos os tipos de valor de retorno - sucesso eo fracasso. Tais valores de retorno pode ser modelado usando tipos de dados algébricos . Java não permitem ADTs modelo naturalmente e nos acostumamos a modelo falha lançando uma exceção. Talvez neste caso exceções verificadas ainda fazem sentido.

Edit: : Outras respostas entrar em mais detalhes sobre "quando" para validar e quando não. Para resumir: métodos públicos - sim; não repetir mesma validação através de camadas.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=119094&siteId=1
Recomendado
Clasificación