Pergunta

Existem situações em que você usaria afirmação em vez de classes de domínio dentro exceções de manuseio de ...

Foi útil?

Solução

Use exceções para a validação de parâmetros e outros controlos que verifique se os usuários de vocês aulas de usá-los como pretendido.

Use afirmações para verificações de consistência interna, ou seja, para indicar você asneira, não o usuário de sua classe.

Assim, se os usuários de sua classe ver uma falha de declaração, eles sabem que é (provavelmente) um erro interno no seu código, não em seu uso de seu código. Por outro lado, se o get exceção de validação de parâmetros, eles sabem que é culpa deles.

Outras dicas

Nunca. Afirmações não são uma forma válida de tratamento de erros. Use-os para auxiliar na identificação de erros de programa durante o teste.

Uma afirmação reflete um estado que não deve nunca ocorrer e não era esperado, onde o aplicativo não pode continuar a executar por uma razão ou outra, enquanto uma exceção indica um estado que não é considerado "normal", mas isso não era inesperado, ea partir do qual pode ser possível para se recuperar.

Por exemplo, se eu alocar espaço na pilha, e essa alocação falhar, então eu não posso continuar a trabalhar, então eu afirmar que o endereço retornado é válido; onde é inválido, a declaração falha, e o programa falhar com ele.

Por outro lado, se eu abrir um arquivo para leitura, e que ele não existe, então pode ser possível recuperar da situação, caso em que uma exceção é lançada (e capturados e manipulados, tanto quanto possível).

Em geral, as afirmações são mais úteis durante a fase de depuração, enquanto exceções são considerados parte do fluxo do programa regular e tratamento de erros. O consenso geral é que as afirmações devem ser desativados no código de produção (para proteger os usuários de aparentes acidentes), enquanto eu li uma escola de pensamento que defende este é contraproducente, e que o usuário deve ver a falha de declaração, para que eles pode relatar corretamente o problema.

Pessoalmente, eu às vezes combinam as duas técnicas; Normalmente, se eu estou pegando uma exceção que eu não acredito que poderia ser acionada. Tomando o exemplo acima, se eu verificar a existência do arquivo antes de tentar abri-lo, então eu não espero que uma exceção seja lançada, e se é, então eu tendem a lidar com isso, elevando uma afirmação no bloco catch relevante. Acho isso uma técnica particularmente útil em Java, quando tais exceções são totalmente controlados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top