[英]Is 'return true' at the end of a method bad practice when exceptions handle all other code paths?
我正在嘗試調用保存用戶信息的Web服務。 本質上,將返回“完成”對象以及服務調用的結果。 我的代碼可以概括如下:
public bool SaveUserInformation(ArgsList args) {
CompletionObject results = SaveService(args);
if (results.Status == Failed)
throw SomeException("onoez D:");
return true;
}
本質上,此方法返回一個布爾值,但該值永遠不會為假。 這對我來說似乎有點奇怪,所以有更好的方法來解決這個問題嗎?
謝謝!
為什么不返回void
? 如果拋出異常,那么您將知道它。 如果未拋出,則說明您的函數已成功完成(返回true)。
try
{
MyFunction();
//here you know it has successfully completed
}
catch(Exception e)
{
//...
}
但是,如果您覆蓋了一個返回bool的虛函數,那么您當然可以始終返回true,因為無論如何您都必須返回一些布爾值。 想一想,您也可以返回false :)
Exception
是例外。
Return value
用於指示調用方有關被調用函數內部發生的事情。
它們是完全不同的設計概念。
拋開您想要的那種方法的行為。
如果沒有什么要通知的,請刪除返回值。
如果存在,請檢查是否有所有異常處理的真正意義。
基於這個問題,在查看您的代碼后,我會說YES 。
無論結果如何,此函數均返回true,因此其返回值沒有意義。
現在,另一方面,如果您嘗試打開一個不存在的文件,則還會得到一個異常。 如果您處理了該異常並使用了默認文件或加載了默認值,並且一切仍然可行,那么返回true將是合乎邏輯的。
您顯示的功能對使用它的任何人都無濟於事...除非您遺漏了一些功能。
為什么還要使它返回布爾值? 您要么以true / false值的形式返回錯誤,要么什么都不返回,並依賴異常。
為什么不簡單地返回CompletionObject
public CompletionObject SaveUserInformation(ArgsList args) {
return SaveService(args);
/*if (results.Status == Failed)
throw SomeException("onoez D:");
return true;*/
}
我無法理解布爾值始終是正確的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.