1. Clean Code
Capítulo 7
Tratamento de Erros
Allan Vieira Ribeiro
Cássio Augusto Silva de Freitas
Eduardo Seguro
Luis Eduardo de Araújo Rocha
2. Agenda
● Utilize exceções ao invés de código
● Implemente Try-catch primeiro
● Utilize exceções não verificadas
● Forneça exceções com contexto
● Defina classes de exceção
● Defina o fluxo normal
● Não retorne null!
● Não passe null!
3. Introdução
● Erros podem ser tratados dispersa e
confusa
● Tratamento de erros é importante, mas se
atrapalha a lógica está errado.
● Existem várias técnicas para tratamento de
erros de forma limpa e elegante.
4. Utilize exceções ao invés de códigos
● Antigamente não haviam exceções
● Utilização de códigos de erros
● Códigos de erros baguçam o invocador, ao
ser necessário tratar todos os códigos.
● Sempre que houver algum erro utilize
exceções.
● exceções torna o traramento de erro algo
independente.
5. Implemente o try-catch primeiro
● Blocos try-catch definem o escopo de
execução
● Melhora na clareza do codigo pelo fado de
sempre apresentar um resultado.
● É uma boa prática implementá-los primeiro,
pois, não importa o que aconteça no try
você deve deixar o programa em um bom
estado.
● Auxilia na hora de testar o software.
6. Utilize exceções não verificadas
● Uma modificação em um nível mais baixo
pode necessitar uma alteração de uma
assinatura em níveis mais altos
● Exceções verificadas violam o princípio
aberto-fechado
● Exceções verificadas podem acabar com o
encapsulamento
● Os custos da dependência geralmente
superam as vantagens
7. Forneça exceções com contexto
● A exceção deve fornecer contexto suficiente
para determinar a fonte e a localização de
um erro
● Crie mensagens de erro informativas e as
passe juntamente com as exceções
● Informe a operação que falhou e o tipo de
falha
8. Defina classes de exceções
● Há várias formas de classificar os erros
● Muitas vezes o tratamento dos erros são
parecidos
● Utilize exceções encapsuladoras
● É uma boa prática encapsular outras
exceções
● Permite uma menor dependência de APIs
de terceiros
9. Defina o fluxo normal
● Exceções são utilizadas para definir o fluxo,
deixando o código poluído e com uma lógica
ruim. Ou seja, caso ocorra uma exceção
uma outra parte da lógica é implementada
no catch.
● Nesses casos pode se criar uma classe ou
configurar um objeto que trata esse caso de
forma que não seja necessário tratar esses
casos.
10. Não retorne null!
● Sempre trate-o no metodo ao qual você
realizou a invocação.
● Talvez seria fácil realizar a verificação de
valores null,
● O problema é a quantidade de verificações
que devem ser feitas.
● Lance Exceções ou retorne um Objeto de
caso especial.
11. Não passe null!
● "Retornar null dos métodos é ruim, mas
recebê-los como parâmetro é ainda pior"
● Gera NullPointerException
● Como consertar:
○ Lance outro tipo de excessão:
InvalidArgumentException
● É um pouco melhor, mas ainda assim temos
um erro.
● "Na maioria das linguagens de programação
não há uma boa forma de lidar com null"
● ENTÃO: NÃO PASSE NULL!
12. Conclusões
● Há várias maneiras de tratar os erros de
forma a deixar seu código mais limpo
● O tratamento de erros deve ser feito de
forma correta e não deixar para ser feito
depois.
● Tratar os erros ajuda na visibilidade do
desenvolvedor e na geração de testes.