1
resposta

[Dúvida] Utilidade do Finally

Como sempre que tratamos uma exceção ela não "explode" e continuamos executando código, não seria mais simples não usar o bloco finally e colocar nosso código que será executado após o bloco try/catch?

1 resposta

Olá, Guilherme.

Tudo bem?

O ponto principal do finally é garantir que um determinado bloco de código seja executado independentemente de uma exceção ter sido lançada ou não. Quando você usa apenas try e catch, você precisa repetir o código que deve ser executado tanto no caso de sucesso quanto no caso de falha. Isso pode levar à duplicação de código, o que não é uma boa prática, pois dificulta a manutenção e aumenta a chance de erros. Veja um exemplo:

try {
    funcaoQuePodeLancarExcecao();
    echo "Executou";
    // Código que deve ser sempre executado
    echo "Finalizou!";
} catch (\Exception $e) {
    echo "Deu erro!";
    // Código que deve ser sempre executado
    echo "Finalizou!";
}

No exemplo acima, a linha echo "Finalizou!"; precisa ser escrita duas vezes, uma no bloco try e outra no catch, para garantir que ela seja executada independentemente de uma exceção ocorrer ou não.

Agora, veja como o uso do finally simplifica isso:

try {
    funcaoQuePodeLancarExcecao();
    echo "Executou";
} catch (\Exception $e) {
    echo "Deu erro!";
} finally {
    // Código que deve ser sempre executado
    echo "Finalizou!";
}

Com o finally, você coloca o código que deve ser sempre executado apenas uma vez, no bloco finally. Isso não só evita a duplicação, mas também torna o código mais limpo e fácil de manter.

Espero ter entendido e conseugido ajudar. Bons estudos!