美文网首页
js函数式编程术语之幂等性 Idempotent

js函数式编程术语之幂等性 Idempotent

作者: 龙旗飘扬的舰队 | 来源:发表于2019-01-11 20:00 被阅读14次

    幂等性 Idempotent

    了解这个概念前,需要知道以下概念

    • [二元运算],它需要三个元素:二元运算符以及该运算符作用的两个变量。如四则运算的加、减、乘、除均属于二元运算。乘法下唯一两个幂等实数为0和1
    • [一元运算],例如 ++ ,正+,负-。比如[高斯符号],它是一个数学符号,形式为方括号[x],表示不大于x的最大整数,高斯符号是幂等的
    • [http方法的幂等],指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的(注意,只是服务器状态,和服务器返回状态无关)
    • 举例
    GET /pageX HTTP/1.1是幂等的。连续调用多次,客户端接收到的结果都是一样的:
    GET /pageX HTTP/1.1   
    GET /pageX HTTP/1.1   
    GET /pageX HTTP/1.1   
    GET /pageX HTTP/1.1
    
    POST /add_row HTTP/1.1不是幂等的。如果调用多次,就会增加多行记录:
    POST /add_row HTTP/1.1
    POST /add_row HTTP/1.1   -> Adds a 2nd row
    POST /add_row HTTP/1.1   -> Adds a 3rd row
    
    DELETE /idX/delete HTTP/1.1是幂等的,即便是不同请求之间接收到的状态码不一样:
    DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
    DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
    DELETE /idX/delete HTTP/1.1   -> Returns 404
    
    • 对接口而言,幂等性实际上就是接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。比如,在App中下订单的时候,点击确认之后,没反应,就又点击了几次。在这种情况下,如果无法保证该接口的幂等性,那么将会出现重复下单问题

    总结幂等性

    • 概念:一个函数执行多次皆返回相同的结果
    • 作用:一个函数被调用多次时,保证内部状态的一致性
    • 对比:和纯函数相比,幂等主要强调多次调用,对内部的状态的影响是一样的(但多次调用返回值可能不同)。而纯函数,主要强调相同的输入,多次调用,输出也相同且无副作用。==纯函数一定是幂等的==
    //虽然是一个面向对象的例子,但是可以说明问题
    var Student = function(name,age){
      this.name = name;
      this.age = age;
    };
    Student.prototype.delName = function(){
      var response = this.name ? this.name + "已被删除":"name不存在";
      this.name = null;
      return response;
    }
    //对内部的影响是一样的,但是返回值可以不同
    var lilei = new Student("lilei",19);
    console.log(lilei.delName());//lilei已被删除
    console.log(lilei.delName());//name不存在
    console.log(lilei.delName());//name不存在
    

    相关文章

      网友评论

          本文标题:js函数式编程术语之幂等性 Idempotent

          本文链接:https://www.haomeiwen.com/subject/ebrfdqtx.html