O controle de exceções é um recurso fundamental na Programação Orientada a Objetos. Geralmente usamos o famoso try..catch
para controlar as exceções no Java ou em outras linguagens que adotam a POO (com notações levemente diferentes).
// try..catch em Java
try {
...
} catch (Exception e) {
...
}
Mas, geralmente, quando estamos criando métodos, muitas vezes queremos que as exceções sejam lançadas para fora, assim usamos o try..catch
e relançamos a exceção no bloco catch
. Acho que isso não é nenhuma surpresa.
// relançando a exceção
try {
...
} catch (Exception e) {
throw e;
}
No entanto, há momentos em que estamos trabalhando com algo sensível, como abrindo arquivos, abrindo conexão com banco de dados, criando arquivos temporários, entre outros, que precisamos usar o bloco finally
, mas ao mesmo tempo queremos que a exceção seja relançada, daí normalmente usamos o bloco try..catch..finally
. Isso também não deve ser nada novo.
// try..catch..finally
try {
...
} catch (Exception e) {
throw e;
} finally {
file.delete()
}
A surpresa, para mim, pelo menos, foi que também existe o bloco try..finally
, sem o catch, mas que funciona da mesma forma que esse último. Claro considerando que dentro do catch só haja a instrução de relançamento da exceção.
// try..finally
try {
...
} finally {
file.delete()
}
Por fim, acredito que muitas outras linguagens também permitem utilizar esse “atalho”. Ao menos no Python funciona, testei e comprovei.