有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript是检查参数的更好方法吗?

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

我发现创建if-else块只是为了检查null指针、数字范围、正确的字符串、正确的对象等等,这变得有点乏味。此外,代码变得更难阅读,因此更难获得概述

所以我想,如果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一起工作

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

(另外,我不确定我在这里设置的标签是否“正确”,因为对于不同的语言来说,这是一个实用的问题,关于这些语言的程序员可能会遇到的一个概念。对此我深表歉意)


共 (1) 个答案

  1. # 1 楼答案

    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 + ")";
        }
    }