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;

エラーを通知するオプションは 2 つしかありません。

  1. 例外を発生させます。
  2. エラーを示すセンチネル値を返します。

3 番目のオプションは、署名を変更することです。

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

ここで、関数の戻り値はエラー コードになりました。

エラー コードを返す場合は、呼び出し元が各呼び出しのすべての戻り値を明示的にチェックするように強制します。それは負担が大きい。最も平凡な Win32 API を呼び出して負担を想像することの楽しさを考えてみてください。

センチネル値を返すと、すべての呼び出し元に同じ負荷がかかります。

例外を発生させると、呼び出し元の仕事が簡単になります。呼び出し元は通常、例外を無視して上方にバブルさせ、中央の例外ハンドラーとして処理することができます。

反対側は、エラー状態が一般的に発生し、すぐに処理する必要がある場合です。このようなシナリオでは、通常、例外を発生させることは間違った選択です。エラーが常に呼び出しサイトで処理される必要がある場合、例外を使用すると、呼び出し元がエラーの処理を忘れる可能性が高くなります。

于 2013-03-29T23:47:38.670 に答える