美文网首页
函数式编程笔记

函数式编程笔记

作者: fish_yijinc | 来源:发表于2019-07-24 10:52 被阅读0次

    函数式编程笔记

    函数是一等公民

    函数是 一等公民 实际上说的是它们和其他对象都一样,你可以像对待任何其他数据类型一样对待它们——把它们存在数组里,当作参数传递,赋值给变量...等等

    用一个函数把另一个函数包起来,再调用执行,真的是非常糟糕的编程习惯。然而,到处都充斥着这样糟糕的代码

    ajax(response => callback(response))
    // 等价于
    ajax(callback)
    
    
    onClick = () => { handleClick() }
    // 等价于
    onClick = handleClick
    
    
    setTimeout(() => { doSomething() }, 3000)
    // 等价于
    setTimeout(doSomething, 3000)
    
    
    renderItem = item => { doRenderItem(item) }
    // 等价于
    renderItem = doRenderItem
    

    我们来看看为何要推荐函数作为一等公民写法

    const callback = json => { use(json) };
    
    // 方式一
    ajax('list/2', json => callback(json));
    
    // 等价于 方式二
    ajax(callback);
    

    显然 方式一 只是徒增代码量,这时,如果callback需要添加一个参数,那么包裹它的那个函数也要做相应的变更。

    添加 err 参数
    const callback = (err, json) => { };
    
    // 方式一 跟着添加 err 参数
    ajax('list/2', (err, json) => callback(err, json));
    
    // 方式二 // 一等公民函数的形式,不需要做任何修改
    ajax(callback);
    

    一等公民的方式被调用 ,很多时候 我们需要小心 this 指向

    const handle = () => { console.log(this) }
    // 
    onClick = handle.bind(this)
    
    

    纯函数

    纯函数是相同的输入,必定得到相同的输出,即它不依赖于程序执行期间函数外部任何状态或数据的变化,必须只依赖于其输入参数。且该函数不会产生任何可观察的副作用。

    看个例子

    // 不纯的
    var max = 100;
    
    var isValid = function(num) {
      return num <= max;
    };
    
    
    // 纯的
    var isValid = function(num) {
      var max = 100;
      return num <= max;
    };
    

    在不纯的版本中,isValid 的结果将取决于 外部 max 这个可变变量的值。输入值之外的 max能够左右 isValid 的返回值,使用纯函数的形式,函数就能做到自给自足

    纯函数就像数学上的函数,是一种输入到输出的映射,且y的值总是能由 x 唯一确定
    y = f(x)

    副作用可能包含:

    • 更改文件系统
    • 往数据库插入记录
    • 发送一个 http 请求
    • 可变数据
    • 打印/log
    • 获取用户输入
    • DOM 查询
    • 访问系统状态

    使用纯函数的好处有:
    可缓存:在计算量大的函数中,实现缓存的一种典型方式是 memoize 技术
    可测试:

    相关文章

      网友评论

          本文标题:函数式编程笔记

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