私の会社のコードベース(.NET 3.5アプリケーション)のいたるところに次のコードパターンがあります。
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
Foo
メソッドが単にIDを取得してBaz
オブジェクトを返す代わりに、使用されていない値を返して実際のオブジェクトをrefまたは出力パラメーターにするのではなく、なぜこれを行うのかを頭に入れようとしています。
私が見逃しているこのコーディングスタイルの隠された利点はありますか?
baz
存在null
と返さbool
れるfalse
存在は同等ではありません。new BazObject()
は決してないnull
のでbazObject
、Exception
がスローされる前に更新されない限りFoo
、false
が返さbaz
れる時は決してなりませんnull
。場合、それは途方も役立つだろう仕様については、Foo
利用可能でした。実際、これはおそらくこのコードが示す最も深刻な問題です。