No caso de código em que você precisa fazer uma limpeza de recursos antes de sair de uma função, há uma grande diferença de desempenho entre essas duas maneiras de fazê-lo.
Limpando o Recurso Antes de Cada Declaração de Retorno
void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); }Limpando o Recurso em um Bloco Finalmente
void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == false) return; dootherstuff(); } finally { logout(); } }
Fiz alguns testes básicos em programas de amostra e não parece haver muita diferença. Eu prefiro muito a finallymaneira de fazer isso - mas estava pensando se isso causaria algum impacto no desempenho de um grande projeto.
if(!cond), é o Java que me fez fazer isso. Em C ++, é assim que escrevo códigos tanto para booleanos quanto para outros tipos - ie int x; if(!x). Como o java me permite usar isso apenas para booleans, parei totalmente de usar o if(cond)& if(!cond)in java.
(someIntValue != 0)que comparar e não avaliar booleanos. Isso cheira a mim, e refatoro-o imediatamente quando o vejo na natureza.