javascript - 检查参数的更好方法?

标签 javascript java c#

在各种情况下,我都会遇到这样的问题:我需要检查函数的参数以保证正确的程序流程。

我发现仅仅为了检查空指针、数字范围、正确的字符串、正确的对象等而创建 if-else block 变得有点乏味。此外,代码变得更难以阅读,因此更难以概览。

所以我想如果在 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 一起工作可能会更容易。

回到问题:是否有一种好方法来定义方法(可能是类和类似的东西)的前置条件、后置条件,或者不变量,以便在各自的语言中易于阅读?

(P.S.我不确定我在这里设置的标签是否“正确”,因为对于不同的语言来说,这是一个关于这些语言的程序员可能会遇到的概念的实际问题。提前抱歉)

最佳答案

Java 在 JDK 中没有参数验证功能。 然而,有specification for Bean Validation具有类似的功能。并且有实现上述规范的第三方库和框架。 Spring 是流行的框架之一,它有一个基于注释的模块 Validation

以下是此类验证的示例:

package hello;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class PersonForm {

    @NotNull
    @Size(min=2, max=30)
    private String name;

    @NotNull
    @Min(18)
    private Integer age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String toString() {
        return "Person(Name: " + this.name + ", Age: " + this.age + ")";
    }
}

关于javascript - 检查参数的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51362876/

相关文章:

java - kafka-设置java启动参数的正确方法

javascript - 使用 Mongoose 和 Typescript,接口(interface)的 ref 字段应该使用什么类型?

javascript - 循环遍历不同数组中的元素

java - 长时间的 Java 处理导致 Flex 中出现错误

java - 如何让小球根据点击的位置朝特定方向移动?

c# - 如何处理重复执行?

c# - C# 中指向根类型类的指针

c# - 哪些 Office 文件查看器和编辑器可用于 Windows Phone 8?

javascript - angularjs xeditable.js 文本字段的动态宽度

javascript - 尝试更改占位符的字体粗细