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?
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?
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!