为了账号安全,请及时绑定邮箱和手机立即绑定

检查参数的更好方法?

检查参数的更好方法?

C#
绝地无双 2021-10-09 16:50:28
在我遇到的各种情况下,我需要检查函数的参数以保证正确的程序流程。我发现创建 if-else 块只是为了检查空指针、数字范围、正确的字符串、正确的对象等变得有点乏味。此外,代码变得更难阅读,因此更难进行概述。所以我想如果在 java/javascript/c#...(带有函数的编程语言)中有一种方法可以定义一些先决条件会怎样。所以例如在java中:  void doSomething( int a {0 <= a < 10}, String b {b != "wrong" && b != [1-9]}){   ...  }或类似的东西:  §a: 0 <= a && 10 > a || a == 25 ...  §b: ...  §ifWrongPreConditions: return; //or throw a new default Exception or whatever  void doSomething( int a, String b){    §a: 0 <= a && 10 > a || a == 25 ...    §b: ...    §ifWrongPreConditions: return; //or throw a new default Exception or whatever  ...Code...  }或方法头上方。基本上,第二个想法也可以帮助后置条件,您只需要查看该函数即可知道您需要做什么,以便该函数正常工作。但是我不确定是否已经实现了类似的东西,但我想让它更容易成为对函数“元信息”的概述,以便可以预测所需和不希望的行为,并且可能更容易使其与 OCL 配合使用。所以回到问题:有没有一种好方法来定义在相应语言中易于阅读的前置条件、后置条件,也许是方法的不变量(可能是类和类似的东西)?(PS 我不确定我在这里设置的标签是否“正确”,因为对于不同语言来说,这是一个实际问题,涉及可能会遇到这些语言中的程序员的概念。为此提前抱歉)
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

断言是一种相当标准的跨语言方法。断言的好处在于,在大多数环境中,您可以将它们包含在测试中,但在发布版本时关闭它们,基于您发现了它们所防御的错误的理论。出于这个原因,断言当然不是处理用户输入的方式。


Java 直接支持它们 ( assert),就像 .Net 平台 ( Debug.Assert) 一样。JavaScript 不直接支持断言,但它们很容易添加一个实用程序函数,或者您可以为它们编写一个 Babel 插件,将断言编译为发布版本的任何内容。


assert 例子:


void doSomething(int a, String b) {

    assert a >= 0 && a < 10;

    assert !b.equals("wrong") && /*...your second condition didn't make sense for strings */;

}


查看完整回答
反对 回复 2021-10-09
?
繁星coding

TA贡献1797条经验 获得超4个赞

首先回答Java。我们有bean 验证:

  • 您使用声明性方法,通过在您的代码将使用的“数据结构”上使用注释

  • 然后你有一些“在后台”的框架,负责根据声明的期望验证实际数据

这里的基本思想:您绝对不会“手动”验证数据结构。相反,您建立一个可以应用于此类结构的符号,然后您拥有一个通用框架来将声明转换为运行时检查。

JavaScript 也有类似的想法,例如请参见validatejs库。

当然,同样的东西也存在于 C# 中。例如,请参阅此SO 问题。


查看完整回答
反对 回复 2021-10-09
  • 3 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信