8.1. Programação defensiva: asserções e erros
Proteja-se de entradas inválidas; asserções para o impossível, tratamento de erro para o esperado.
Resumo
- Nada de "lixo entra, lixo sai". Verifique dados externos e parâmetros; decida como tratar o inválido.
- Asserção: condição que nunca deveria ocorrer (bug). Tratamento de erro: condição que pode ocorrer.
- Não ponha código executável dentro da asserção. Use-as para pré e pós-condições.
- Técnicas: valor neutro, próximo dado válido, valor anterior, valor legal mais próximo, log, código de erro, desligar.
- Correção × robustez: sistema crítico prefere parar; app de consumo prefere continuar funcionando.
Perguntas-chave
responda de cabeça, depois abraQuando usar asserção e quando tratar erro?
Asserção para condições que indicam bug no programa; tratamento de erro para situações previstas, como entrada inválida do usuário.
Por que não colocar código executável em asserções?
Porque asserções podem ser desligadas na versão final, e o código dentro delas deixaria de rodar.
Qual a diferença entre correção e robustez?
Correção é nunca retornar resultado errado (melhor nada que errado); robustez é continuar funcionando mesmo com resultados imperfeitos.
Exercícios de fixação
0/5 respondidas1.
O usuário digita uma data inválida num formulário. O que usar?
2.
Qual o problema de
assert(abrirArquivo(nome))?3.
Um software de radioterapia recebe uma leitura de dose incoerente. O que o livro favorece nesse tipo de sistema?
4.
Um editor de texto encontra um caractere de fonte inválido ao desenhar a tela. A reação mais adequada é:
5.
Asserções são especialmente úteis para documentar e verificar: