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

Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetosGabriel Faustino
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
 
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Walmyr Lima e Silva Filho
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud ComputingAlê Borba
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoinWilliam Chong
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeElias Nogueira
 

Mais procurados (20)

Aprendendo a Usar o Netbeans
Aprendendo a Usar o NetbeansAprendendo a Usar o Netbeans
Aprendendo a Usar o Netbeans
 
Modelos de Engenharia de Software
Modelos de Engenharia de SoftwareModelos de Engenharia de Software
Modelos de Engenharia de Software
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetos
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Módulo 1 de PSI
Módulo 1 de PSIMódulo 1 de PSI
Módulo 1 de PSI
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu time
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
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
 

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
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 

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.