美文网首页
函数式编程01之纯函数、函数组合或饲养函数、结合律

函数式编程01之纯函数、函数组合或饲养函数、结合律

作者: Martin_Luo | 来源:发表于2020-07-17 17:04 被阅读0次
  1. 什么是纯函数

概念:相同的输入得到相同的输出,不依赖且不影响外部环境也不产生任何副作用。

优点:易读/易维护。

代码

不是纯函数:
var a = 1;
function test() {
  console.log(a); // 当a的值被改变后,下次在执行test()会得到不同的结果
}
test()
纯函数:
var a = 1;
function test(num) {
  console.log(num);
}
test(a);
  1. 函数组合或饲养函数

概念:由若干个纯函数、偏函数、柯里化函数组合成一个新的函数,并实现一种有序执行的效果。(注意:函数组合是为了组合函数,不是为了传递参数)

代码

function toUpperCase(str) {
    return str.toUpperCase();
}
function exclaim(str) {
    return str + '!';
}
function split(str) {
    return str.split('')
}

function compose() {
    var args = Array.prototype.slice.call(arguments);
            
    return function(x) {
        // prev必需。初始值, 或者计算结束后的返回值。
        // cur必需。当前元素
        // x 可选。传递给函数的初始值
        // return args.reduce(function(res, cb) { // 从左往右执行
        // 从右往左执行
        return args.reduceRight(function(res, cb) {
            return cb(res)
        }, x)
    }
}

var f = compose(split, toUpperCase, exclaim);
console.log(f('hello'))

3.结合律

概念:在组合函数的参数中,再进行函数的分组组合和原来的分组组合得出来的结论是一摸一样的。

代码

function toUpperCase(str) {
    return str.toUpperCase();
}
function exclaim(str) {
    return str + '!';
}
function split(str) {
    return str.split('')
}

function compose() {
    var args = Array.prototype.slice.call(arguments);
            
    return function(x) {
        // prev必需。初始值, 或者计算结束后的返回值。
        // cur必需。当前元素
        // x 可选。传递给函数的初始值
        return args.reduceRight(function(res, cb) {
            return cb(res)
        }, x)
    }
}

var f = compose(split, toUpperCase, exclaim);
var f1 = compose(compose(split, toUpperCase), exclaim);
var f2 = compose(split, compose(toUpperCase, exclaim));
console.log(f('hello'))
console.log(f1('hello'))
console.log(f2('hello'))

相关文章

  • 函数式编程01之纯函数、函数组合或饲养函数、结合律

    什么是纯函数 概念:相同的输入得到相同的输出,不依赖且不影响外部环境也不产生任何副作用。 优点:易读/易维护。 代...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • 函数式编程

    目录 [TOC] 课程介绍 为什么要学习函数编程以及什么是函数编程 函数式编程的特性(纯函数、柯里化、函数组合等)...

  • 函数式编程入门

    编程思路的概念[补充] 函数式编程思维范畴论基本理论基本概念纯函数函数的柯里化函数的组合Point Free声明式...

  • Clojure学习笔记(三)——函数式编程

    函数式编程的理念 函数式编程使得代码的编写、阅读、测试和重用都更容易了。 纯函数 函数式程序构建于纯函数之上。纯函...

  • 函数式编程

    什么是函数式编程? 函数式:functional 一种编程范式 函数式编程特点 把计算视为函数而非指令 纯函数式编...

  • 函数式编程(二)

    纯函数 函数式编程中的函数,指的就是纯函数,这也是整个函数式编程的核心纯函数:相同的输入永远会得到相同的输出,而且...

  • 前端基础—带你理解什么是函数式编程

    框架总览 ? 引言 ? 什么是函数式编程? ? 函数是纯函数? 什么是纯函数? 函数的副作用? 使用纯函数的优点?...

  • 5.纯函数

    理解JavaScript纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式...

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

网友评论

      本文标题:函数式编程01之纯函数、函数组合或饲养函数、结合律

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