Bir yöntem varsa
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
daha çok aranmalı IsStuffDone()
mı?
Her iki isim de kullanıcı tarafından yanlış yorumlanabilir: Eğer isim buysa, DoStuff()
neden bir boole döndürüyor? Adı IsStuffDone()
açıksa, yöntemin bir görevi yerine getirip getirmediği veya yalnızca sonucunu kontrol edip etmediği açık değildir.
Bu dava için bir kongre var mı? Veya alternatif bir yaklaşım, bu kusurlu olarak kabul edilir? Örneğin, C # gibi çıktı parametrelerine sahip dillerde, bir boolean durum değişkeni, yönteme bir yöntem olarak iletilebilir ve yöntemin dönüş türü olur void
.
EDIT: Özel sorunumda istisna işleme doğrudan arayan kişiye devredilemez, çünkü yöntem bir arayüz uygulamasının bir parçasıdır. Bu nedenle, arayan, farklı uygulamaların tüm istisnalarıyla uğraşmakla suçlanamaz. Bu istisnalara aşina değil. Ancak, arayan kişi, npinti'nin cevabında ve yorumundaStuffHasNotBeenDoneForSomeReasonException
önerildiği gibi özel bir istisna ile ilgilenebilir .
boolean
, istisnayı sarmak ya da geçmek yerine geri dönmek neredeyse her zaman yanlıştır.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? İstisnalar hakkındaki sorunuzu yanıtlamak için - Arayan kişinin onları ele almasına izin verdim veya onları yakalayıp "bu yöntem işini yapma" anlamına gelen özel bir istisna atayım. Paylaş ve Keyfini çıkar.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Aynısını (özel?) İstisnalar ile yapmak işe yaramaz bir şekilde daha karmaşık olurdu.