异常处理,按合同设计

时间:2013-03-29 23:40:49

标签: delphi

对于没有用户界面访问权限的函数,没有指定参数处理无效函数调用的最佳方法是什么

   function safeSQRT ( x : Real)  : real; 
   begin

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

    if (x<0) then 
            begin
            exit;

            ///  create a exception here ??

            end; 



   end; 

1 个答案:

答案 0 :(得分:5)

使用此签名

function safeSQRT(x : Real): Real;

您只有两个选项来表示错误:

  1. 提出异常。
  2. 返回表示错误的标记值。
  3. 第三个选项是更改签名

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

    其中函数返回值现在是错误代码。

    如果您返回错误代码,则强制调用者明确检查每个调用的每个返回值。这是一个沉重的负担。想想调用即使是最平凡的Win32 API来描绘负担的乐趣。

    如果你返回一个标记值,那么每个调用者都会受到同样的负担。

    如果你引发异常,那么来电者的工作会更容易。调用者通常可以忽略异常并让它们向上冒泡并作为中心异常处理程序处理。

    另一方面是错误情况普遍发生并需要立即处理。在这种情况下,提出异常通常是错误的选择。如果必须始终在呼叫站点处理错误,那么使用异常会使调用者忘记处理错误。