Якщо є метод
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
чи варто його швидше називати IsStuffDone()
?
Обидва імені може бути неправильно інтерпретовано користувачем: Якщо ім'я, DoStuff()
чому воно повертає булеве? Якщо назва - IsStuffDone()
невідомо, чи метод виконує завдання чи лише перевіряє його результат.
Чи існує умова для цього випадку? Або альтернативний підхід, оскільки цей вважається недосконалим? Наприклад, у мовах, які мають вихідні параметри, такі як C #, булева змінна статусу може бути передана методу як одна, і тип повернення методу був би void
.
EDIT: У моїй конкретній проблемі обробка виключень не може бути безпосередньо делегована абоненту, оскільки метод є частиною реалізації інтерфейсу. Отже, абоненту не може бути доручено працювати з усіма винятками різних реалізацій. З тими винятками він не знайомий. Однак, абонент може вирішувати спеціальний виняток, як StuffHasNotBeenDoneForSomeReasonException
це було запропоновано у відповіді та коментарі npinti .
boolean
замість обгортання чи передавання винятку майже завжди неправильне.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? І щоб відповісти на ваше запитання про винятки - я або дозволю абоненту обробляти їх, або спіймати їх, а потім викиньте спеціальний виняток, що означає "цей метод не робить своєї справи". Діліться та насолоджуйтесь.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Зробити те саме з (звичайними?) Винятками було б марно складніше.