SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
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
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!
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.
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.
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.
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
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
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
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.
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.
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!
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.

Mais conteúdo relacionado

Mais procurados

Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlHelder Lopes
 
Apostila excel 2016
Apostila excel 2016Apostila excel 2016
Apostila excel 2016ProsubSig
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
13 Java Script - Validação de formulário
13 Java Script  - Validação de formulário13 Java Script  - Validação de formulário
13 Java Script - Validação de formulárioCentro Paula Souza
 
50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidosEdvan Mateó
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributosLoiane Groner
 
Gerência de processos
Gerência de processosGerência de processos
Gerência de processosVirgínia
 
Modelo Incremental - Engenharia de Software
Modelo Incremental - Engenharia de SoftwareModelo Incremental - Engenharia de Software
Modelo Incremental - Engenharia de SoftwareDaniela Franciosi
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Refactoring Techniques
Refactoring TechniquesRefactoring Techniques
Refactoring TechniquesMayada Ghanem
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesDaniel Brandão
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoTiago Bencardino
 

Mais procurados (20)

Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Apostila excel 2016
Apostila excel 2016Apostila excel 2016
Apostila excel 2016
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
13 Java Script - Validação de formulário
13 Java Script  - Validação de formulário13 Java Script  - Validação de formulário
13 Java Script - Validação de formulário
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Clean Code
Clean CodeClean Code
Clean Code
 
50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
 
Gerência de processos
Gerência de processosGerência de processos
Gerência de processos
 
Modelo Incremental - Engenharia de Software
Modelo Incremental - Engenharia de SoftwareModelo Incremental - Engenharia de Software
Modelo Incremental - Engenharia de Software
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
 
Refactoring Techniques
Refactoring TechniquesRefactoring Techniques
Refactoring Techniques
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 

Semelhante a Livro Código Limpo: Tratamento de Erros - Cap 7

1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em javaMarques Amaro
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
Boas práticas com TDD
Boas práticas com TDD Boas práticas com TDD
Boas práticas com TDD Camilo Lopes
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
Qualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNQualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNFrederico Pranto
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosArthur Emanuel
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 

Semelhante a Livro Código Limpo: Tratamento de Erros - Cap 7 (20)

Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Debug Otimizado
Debug OtimizadoDebug Otimizado
Debug Otimizado
 
Gisele
GiseleGisele
Gisele
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em java
 
6 excecoes
6 excecoes6 excecoes
6 excecoes
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Object calisthenics
Object calisthenicsObject calisthenics
Object calisthenics
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Boas práticas com TDD
Boas práticas com TDD Boas práticas com TDD
Boas práticas com TDD
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Qualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNQualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRN
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 

Mais de Inael Rodrigues

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemInael Rodrigues
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reaisInael Rodrigues
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: ComentáriosInael Rodrigues
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Inael Rodrigues
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Inael Rodrigues
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiInael Rodrigues
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android Inael Rodrigues
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityInael Rodrigues
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilInael Rodrigues
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Inael Rodrigues
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1Inael Rodrigues
 

Mais de Inael Rodrigues (18)

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de Pastagem
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reais
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Código limpo: Limites
Código limpo: LimitesCódigo limpo: Limites
Código limpo: Limites
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: Comentários
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1
 

Livro Código Limpo: Tratamento de Erros - Cap 7

  • 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.