Im Falle von Code, bei dem Sie vor dem Beenden einer Funktion eine Ressourcenbereinigung durchführen müssen, besteht ein wesentlicher Leistungsunterschied zwischen diesen beiden Methoden.
Bereinigen Sie die Ressource vor jeder return-Anweisung
void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); }Bereinigen Sie die Ressource in einem finally-Block
void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == false) return; dootherstuff(); } finally { logout(); } }
Ich habe einige grundlegende Tests in Beispielprogrammen durchgeführt und es scheint keinen großen Unterschied zu geben. Ich bevorzuge das so sehr finally- aber ich habe mich gefragt, ob es bei einem großen Projekt zu Leistungseinbußen kommen wird.
if(!cond), dann ist es Java, das mich dazu gebracht hat. In C ++ schreibe ich so Code sowohl für Boolesche als auch für andere Typen - dh int x; if(!x). Da ich dies mit Java nur für verwenden darf booleans, habe ich die Verwendung von if(cond)& if(!cond)in Java vollständig eingestellt .
(someIntValue != 0)als zu vergleichen, als Boolesche Werte zu bewerten. Das riecht für mich und ich überarbeite es sofort, wenn ich es in freier Wildbahn sehe.