Em Engenharia de Software, o conceito de concisão e correção leva a criação de diversos Design Patterns que buscam resolver problemas conhecidos, de maneira documentada. Um dos principais problemas que existem no desenvolvimento de software, especialmente no que diz respeito à linguagens orientadas a objetos é o de tratamento de exceções[1].

O conceito de Nested Try-Catch, desenvolvido por experientes analistas de sistemas brasileiros, resolve de maneira muito elegante este problema[2]

Problema editar

Suponha que você quer abrir um arquivo em Java. Como todos sabemos, ao ler um arquivo, pode ser lançada uma exceção, que deve ser tratada:

    try {    
        FileInputStream fin=new FileInputStream("D:\\testout.txt");    
        int i=fin.read();  
        System.out.print((char)i);    
  
        fin.close();    
    } catch(Exception e) {
        System.out.println(e);
    }

Ora, se eu receber uma exception, o arquivo não é lido!

O pattern Nested try-catch nos ajuda a resolver de maneira muito elegante o problema encontrado acima.

Solução usando Nested Try-Catch editar

A definição do pattern Nested Try-Catch diz o seguinte:

Se eu recebo uma exception chamando um trecho de código, o melhor meio de resolver esse problema é chamando o código de novo dentro da exception.

Analisando o código acima, ao transportá-lo para o pattern, temos a seguinte situação:

    try {    
        FileInputStream fin=new FileInputStream("D:\\testout.txt");    
        int i=fin.read();  
        System.out.print((char)i);    
  
        fin.close();    
    } catch(Exception e) {
        try {    
            FileInputStream fin=new FileInputStream("D:\\testout.txt");    
            int i=fin.read();  
            System.out.print((char)i);    

            fin.close();    
        } catch(Exception e) {
            //Podemos repetir quantas vezes for necessário!
            //Ou mesmo chamar em loop...
        } 
    }

Olhando o código acima, temos 2x mais certeza que ele funciona e terá o resultado desejado, uma vez que a execução dele será feita mesmo em caso de exceção (por exemplo, o arquivo estava sendo acessado por outro processo).

Com isso, podemos concluir que:

  • O padrão Nested Try-Catch aumenta a confiabilidade do código;
  • Diminui a quantidade de erros de execução (exceção);
  • Deixa o código mais legível;
  • É thread-safe;
  • Pode ser aplicado em qualquer situação e em qualquer linguagem.

Referências editar

  1. «5 Reasons Why Business Exceptions Are a Bad Idea». reflectoring.io (em inglês). 4 de junho de 2019. Consultado em 7 de janeiro de 2020 
  2. «Pesquisador brasileiro cria aplicativo para detecção precoce de Alzheimer». EXAME. Consultado em 7 de janeiro de 2020