2013-03-29 77 views
0

什麼是處理無效功能的最佳方式調用與未指定的參數對於不具有用戶界面訪問異常處理,契約式設計

function safeSQRT (x : Real) : real; 
    begin 

    /// check for valid params ..... 

    if (x<0) then 
      begin 
      exit; 

      /// create a exception here ?? 

      end; 



    end; 
+0

在第一次引發異常之前,您將退出該功能。 – TLama

回答

5

與此簽名

function safeSQRT(x : Real): Real; 

你的功能只有兩種選擇來發出錯誤信號:

  1. 引發異常。
  2. 返回一個指示錯誤的標記值。

第三個選項是改變簽名

function safeSQRT(x : Real; out retval: Real): Integer; 

現在在哪裏函數的返回值是一個錯誤代碼。

如果您返回錯誤代碼,則強制呼叫者明確檢查每個呼叫的每個返回值。這是一個沉重的負擔。想想即使是最平凡的Win32 API來調用負擔的樂趣。

如果您返回一個標記值,那麼每個調用者都會承擔相同的負擔。

如果引發異常,則調用者的工作更容易。調用者通常可以忽略異常並讓它們向上冒泡並被處理爲中央異常處理程序。

另一方面是當出現錯誤情況並且需要立即處理時。在這種情況下,引發例外通常是錯誤的選擇。如果必須始終在呼叫站點處理錯誤,那麼使用例外可能會導致調用方忘記處理它。