0

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

   function safeSQRT ( x : Real)  : real; 
   begin

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

    if (x<0) then 
            begin
            exit;

            ///  create a exception here ??

            end; 



   end; 
4

1 回答 1

5

有了这个签名

function safeSQRT(x : Real): Real;

您只有两个选项可以发出错误信号:

  1. 引发异常。
  2. 返回指示错误的标记值。

第三个选项是更改签名

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

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

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

如果您返回一个哨兵值,那么每个调用者都会承受同样的负担。

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

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

于 2013-03-29T23:47:38.670 回答