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

Testes em uma arquitetura de micro-serviços - Renan Martins
Testes em uma arquitetura de micro-serviços - Renan MartinsTestes em uma arquitetura de micro-serviços - Renan Martins
Testes em uma arquitetura de micro-serviços - Renan Martinsminastestingconference
 
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...Mayara Fernandes
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoInstituto CENTEC
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de ProgramaçãoBeDMK
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Coding Best Practices
Coding Best PracticesCoding Best Practices
Coding Best Practicesmh_azad
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPClayton de Almeida Souza
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - ProcedimentoWesley R. Bezerra
 
Exception Handling
Exception HandlingException Handling
Exception HandlingReddhi Basu
 

Mais procurados (20)

Testes em uma arquitetura de micro-serviços - Renan Martins
Testes em uma arquitetura de micro-serviços - Renan MartinsTestes em uma arquitetura de micro-serviços - Renan Martins
Testes em uma arquitetura de micro-serviços - Renan Martins
 
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de Programação
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
clean code
clean codeclean code
clean code
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Coding Best Practices
Coding Best PracticesCoding Best Practices
Coding Best Practices
 
Aula 9 - Estruturas Condicionais
Aula 9 - Estruturas CondicionaisAula 9 - Estruturas Condicionais
Aula 9 - Estruturas Condicionais
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHP
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Clean Code
Clean CodeClean Code
Clean Code
 
Princípio law of demeter
Princípio law of demeterPrincípio law of demeter
Princípio law of demeter
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - Procedimento
 
Exception Handling
Exception HandlingException Handling
Exception Handling
 

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
 
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
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
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
 
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
 
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 (17)

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