簡體   English   中英

當異常處理所有其他代碼路徑時,方法末尾的“返回真”是錯誤的做法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM