以下はC#ですが、コードパターンはおそらくすべてのオブジェクト指向言語に関連しています。
私には、MethodWithTryとMethodWithSomeReturnValueの2つのメソッドがあり、機能的には同等であると信じています。それらの1つが「正しい」方法であるかどうかを知りたいです。それらの1つを悪い選択にする1つ(例:並行性)について何かありますか?
public void MethodWithTry()
{
int returnValue;
string someInput;
if (TryGetValueThisWay(someInput, returnValue))
{
//do something this way
}
else
{
if (TryGetValueThatWay(someInput, returnValue))
{
//do something that way
}
else
{
//do something a default way
}
}
}
public void MethodWithSomeReturnValue()
{
int? returnValue;
string someInput;
returnValue = GetValueThisWay(someInput);
if (returnValue != null)
{
//do something this way
}
else
{
returnValue = GetValueThatWay(someInput);
if (returnValue != null)
{
//do something that way
}
else
{
//do something a default way
}
}
}
呼び出されるメソッドのシグネチャは次のとおりです。
public int? GetValueThisWay(string input)
public int? GetValueThatWay(string input)
private bool TryGetValueThisWay(string input, out int value)
private bool TryGetValueThatWay(string input, out int value)
編集-追加情報
呼び出されている問題のメソッドは、コレクションで検索を実行しています。だから別の名前があったかもしれない
public int? GetValueFromCollectionA()
public int? GetValueFromCollectionB()
IMHO、TrySomeMethodName-コードをいくらか読みやすくします。ただし、特に戻り値が整数の場合にOUT変数を使用すると、常に可変であり、少なくとも2回割り当てられます(デフォルトでは0に設定されます)。