방법이 있다면
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
오히려 호출해야 IsStuffDone()
합니까?
사용자가 두 이름을 모두 잘못 해석 할 수 있습니다. 이름이 DoStuff()
부울 인 이유는 무엇입니까? 이름이 IsStuffDone()
확실하지 않은 경우, 메소드가 태스크를 수행하는지 또는 결과 만 확인하는지 명확하지 않습니다.
이 사건에 대한 협약이 있습니까? 또는 이것이 결함으로 간주되는 대체 접근법입니까? 예를 들어, C #과 같은 출력 매개 변수가있는 언어에서 부울 상태 변수는 메소드에 전달 될 수 있으며 메소드의 리턴 유형은입니다 void
.
편집 : 내 특정 문제에서 메서드는 인터페이스 구현의 일부이기 때문에 예외 처리를 호출자에게 직접 위임 할 수 없습니다. 따라서 호출자는 다른 구현의 모든 예외를 처리해야 할 책임이 없습니다. 이러한 예외에는 익숙하지 않습니다. 그러나 호출자는 npinti의 answer and commentStuffHasNotBeenDoneForSomeReasonException
에서 제안한 것처럼 사용자 정의 예외를 처리 할 수 있습니다 .
boolean
예외를 줄 바꿈하거나 전달 하는 대신 반환하는 것이 거의 항상 잘못되었으므로 "파손"이라고 부릅니다 .
BadlyDesignedMethodInSeriousNeedOfRefactoring
? 그리고 예외에 대한 귀하의 질문에 대답하기 위해-발신자가 예외를 처리하게하거나 잡은 다음 "이 방법은 그 일을 수행하지 않습니다"를 의미하는 사용자 정의 예외를 던지겠습니다. 공유하고 즐기십시오.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
입니다. (사용자 정의?) 예외와 동일하게 수행하는 것은 쓸모 없게 복잡 할 것입니다.