Frequentemente, quando escrevo uma função, quero garantir que as entradas sejam válidas para detectar esses erros o mais cedo possível (acredito que sejam chamados de pré-condições). Quando uma pré-condição falha, sempre lancei uma exceção. Mas estou começando a duvidar se essa é a melhor prática e, se não, as afirmações seriam mais apropriadas.
Então, quando devo fazer o que: quando é apropriado usar uma asserção e quando é apropriado lançar uma exceção?
exceptions
assertions
gablin
fonte
fonte
Respostas:
As asserções devem ser usadas apenas para verificar condições que devem ser logicamente impossíveis de serem falsas (leia-se: verificações de sanidade). Essas condições devem se basear apenas nas entradas geradas pelo seu próprio código. Qualquer verificação baseada em entradas externas deve usar exceções.
Uma regra simples que eu sigo a seguir é verificar os argumentos de funções privadas com afirmações e usar exceções para argumentos de funções públicas / protegidas.
fonte
As asserções são usadas para encontrar erros de programação. Seus programas devem funcionar tão bem quando todas as asserções são removidas.
Exceções, por outro lado, são para situações que podem acontecer mesmo quando o programa é perfeito; eles são causados por influências externas, como hardware, rede, usuários etc.
fonte
A prática típica de programação é compilar asserções a partir de compilações de produção / lançamento. As asserções ajudarão apenas durante os testes internos a detectar falhas nas suposições. Você não deve assumir o comportamento de agências externas; portanto, não deve afirmar sobre eventos da rede ou do usuário. Também é uma boa prática escrever código de manipulação para compilações de produção, caso uma asserção falhe.
Por exemplo, em C,
As exceções devem ser incorporadas às construções de produção. A alternativa para exceção é retornar erro e não asserções.
fonte
Um problema com as afirmações para mim é que elas estão desativadas por padrão em Java.
Usamos uma estratégia de falha em que o programa - que pode estar sendo executado há anos - precisa travar o mais cedo possível para evitar a corrupção de dados em caso de dados incorretos (de forma inesperada). É para isso que usamos a verificação e, usando afirmações, basicamente arriscamos que elas não sejam ativas.
fonte