方法がある場合
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
むしろ呼ばれるべきIsStuffDone()
ですか?
ユーザーは両方の名前を誤って解釈する可能性があります。名前がDoStuff()
理由である場合、ブール値を返しますか?名前がIsStuffDone()
メソッドの場合、メソッドがタスクを実行するのか、結果のみをチェックするのかは明確ではありません。
この場合の規則はありますか?または、これは欠陥と見なされるため、代替アプローチですか?たとえば、C#などの出力パラメーターを持つ言語では、ブールステータス変数を1つとしてメソッドに渡すことができ、メソッドの戻り値の型はになりますvoid
。
編集:私の特定の問題では、メソッドはインターフェイス実装の一部であるため、例外処理を呼び出し元に直接委任することはできません。したがって、呼び出し側は、異なる実装のすべての例外を処理することはできません。これらの例外に精通していません。ただし、呼び出し元はStuffHasNotBeenDoneForSomeReasonException
、npintiのanswerおよびcommentで提案されたようなカスタム例外を処理できます。
boolean
場合、例外をラップまたは渡す代わりにを返すことはほとんど常に間違っているため、「壊れた」と呼びます。
BadlyDesignedMethodInSeriousNeedOfRefactoring
?そして例外に関するあなたの質問に答えるために-呼び出し元にそれらを処理させるか、それらをキャッチしてから「このメソッドは仕事をしません」という意味のカスタム例外をスローします。共有してお楽しみください。
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
。(カスタム?)例外で同じことを行うと、無駄に複雑になります。