Если есть метод
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
это лучше назвать IsStuffDone()
?
Пользователь может неверно истолковать оба имени: если имя такое, DoStuff()
почему оно возвращает логическое значение? Если имя IsStuffDone()
такое, неясно, выполняет ли метод задачу или только проверяет ее результат.
Есть соглашение для этого случая? Или альтернативный подход, так как этот считается ошибочным? Например, в языках с выходными параметрами, таких как C #, логическая переменная состояния может быть передана методу как единое целое, а тип возвращаемого значения метода будет void
.
РЕДАКТИРОВАТЬ: В моей конкретной проблеме обработка исключений не может быть напрямую делегирована вызывающей стороне, потому что метод является частью реализации интерфейса. Следовательно, вызывающей стороне не может быть поручено иметь дело со всеми исключениями различных реализаций. Он не знаком с этими исключениями. Однако вызывающая сторона может иметь дело с пользовательским исключением, StuffHasNotBeenDoneForSomeReasonException
как было предложено в ответе и комментарии npinti .
boolean
вместо переноса или передачи исключения почти всегда неверно.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? И чтобы ответить на ваш вопрос об исключениях - я бы либо позволил вызывающей стороне обработать их, либо перехватил бы их, а затем выдал пользовательское исключение, которое означает «этот метод не выполняет свою работу». Поделитесь и наслаждайтесь.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Делать то же самое с (пользовательскими?) Исключениями было бы бесполезно сложнее.