如果有办法
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
它应该被称为IsStuffDone()
吗?
用户可能会误解这两个名称:如果名称是DoStuff()
为什么它返回布尔值?如果名称IsStuffDone()
不明确,则该方法是执行任务还是仅检查其结果。
这种情况有约定吗?还是一种替代方法,因为这被认为是有缺陷的?例如,在具有输出参数的语言(如C#)中,可以将布尔状态变量作为1传递给方法,而方法的返回类型为void
。
编辑:在我的特定问题中,异常处理不能直接委托给调用者,因为该方法是接口实现的一部分。因此,调用者不必负责处理不同实现的所有异常。它不熟悉那些例外。但是,调用者可以处理自定义异常,如npinti的answer和comment中StuffHasNotBeenDoneForSomeReasonException
建议的那样。
boolean
而不是包装或传递异常几乎总是错误的。
BadlyDesignedMethodInSeriousNeedOfRefactoring
?并回答您有关异常的问题-我要么让调用者处理它们,要么捕获它们,然后引发一个自定义异常,该异常意味着“此方法不起作用”。分享并享受。
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
。对(自定义?)异常执行相同操作将变得毫无用处,变得更加复杂。