Jika ada metode
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
haruskah lebih baik disebut IsStuffDone()
?
Kedua nama bisa disalahtafsirkan oleh pengguna: Jika nama itu DoStuff()
mengapa ia mengembalikan boolean? Jika namanya IsStuffDone()
tidak jelas apakah metode melakukan tugas atau hanya memeriksa hasilnya.
Apakah ada konvensi untuk kasus ini? Atau pendekatan alternatif, karena yang ini dianggap cacat? Misalnya dalam bahasa yang memiliki parameter output, seperti C #, variabel status boolean dapat diteruskan ke metode sebagai satu dan tipe pengembalian metode akan void
.
EDIT: Dalam penanganan pengecualian masalah khusus saya tidak dapat didelegasikan secara langsung ke pemanggil, karena metode ini merupakan bagian dari implementasi antarmuka. Oleh karena itu, penelepon tidak dapat dituntut berurusan dengan semua pengecualian implementasi yang berbeda. Itu tidak akrab dengan pengecualian itu. Namun, penelepon dapat menangani pengecualian khusus seperti StuffHasNotBeenDoneForSomeReasonException
yang disarankan dalam jawaban dan komentar npinti .
boolean
bukannya membungkus atau melewati pengecualian hampir selalu salah.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? Dan untuk menjawab pertanyaan Anda tentang pengecualian - Saya akan membiarkan penelepon menangani mereka, atau menangkap mereka dan kemudian melemparkan pengecualian khusus yang berarti "metode ini tidak melakukan tugasnya". Bagikan dan nikmati.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Melakukan hal yang sama dengan pengecualian (kebiasaan?) Akan sia-sia lebih rumit.