当前位置:  开发笔记 > 编程语言 > 正文

验证函数参数?

如何解决《验证函数参数?》经验,为你挑选了2个好方法。

我定期验证我的函数参数:

public static void Function(int i, string s)
{
  Debug.Assert(i > 0);
  Debug.Assert(s != null);
  Debug.Assert(s.length > 0);
}

当然,检查在函数的上下文中是"有效的".

这是常见的行业惯例吗?关于函数参数验证的常见做法是什么?



1> Robert Pauls..:

如果值无效或稍后会导致异常,则接受的做法如下:

if( i < 0 )
   throw new ArgumentOutOfRangeException("i", "parameter i must be greater than 0");

if( string.IsNullOrEmpty(s) )
   throw new ArgumentNullException("s","the paramater s needs to be set ...");

所以基本参数例外列表如下:

ArgumentException
ArgumentNullException
ArgumentOutOfRangeException



2> Daniel Daran..:

你写的是前提条件,也是契约式设计中的一个基本要素.谷歌(或"StackOverflow":)用于该术语,你会发现很多关于它的好信息,以及一些不良信息.注意,该方法还包括后置条件类不变量的概念.

让我们明确断言断言是一种有效的机制.

当然,它们通常(并非总是)在发布模式下进行检查,因此这意味着您必须在发布之前测试您的代码.

如果断言被启用并且违反了断言,则某些使用断言的语言(特别是在Eiffel中)的标准行为是抛出断言违例异常.

如果您要发布代码库,那么未选中的断言不是一种方便或可行的机制,也不是(显然)一种验证直接可能不正确的输入的方法.如果您有"可能不正确的输入",则必须将输入验证设计为程序正常行为的一部分; 但你仍然可以在内部模块中自由使用断言.


其他语言,如Java,有更多的传统,即明确检查参数并在出错时抛出异常,主要是因为这些语言没有强大的"断言"或"按合同设计"的传统.

(有些人可能觉得很奇怪,但我发现传统上的差异是可敬的,而不一定是邪恶的.)

另请参阅此相关问题.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有