関数を終了する前にリソースのクリーンアップを行う必要があるコードの場合、これらの2つの方法の間に大きなパフォーマンスの違いがあります。
すべてのreturnステートメントの前にリソースをクリーニングする
void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); }
finallyブロックでのリソースのクリーニング
void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == false) return; dootherstuff(); } finally { logout(); } }
サンプルプログラムでいくつかの基本的なテストを行いましたが、大きな違いはないようです。私はこれfinally
を行う方法を非常に好みますが、大きなプロジェクトでパフォーマンスが低下するのではないかと考えていました。
if(!cond)
、それが私にこれをさせたのはjavaです。C ++では、ブール値と他の型の両方のコードを記述する方法int x;
if(!x)
です。Javaでこれを使用できるのはのみであるためbooleans
、Javaでif(cond)
&の使用を完全に停止しましたif(!cond)
。
(someIntValue != 0)
ブール値を評価するのではなく、比較するよりもむしろ見たいです。それは私にとって臭いであり、野生でそれを見るとすぐにそれをリファクタリングします。