Redux源码解读--(1)知识准备之函数式编程
2018-01-17 15:42
344 查看
函数式编程的思想是把多步骤的运算操作携程一系列嵌套函数的调用。
本文引用阮一峰大神的几个例子作为说明:
一个数学表达式 : (1 + 2) * 3 - 4
完成可以分为三个步骤:
1. var a = 1 + 2;
2. var b = a * 3;
3. var c = b - 4;
而函数式编程要把多操作映射成嵌套函数。
var result = subtract(multiply(add(1,2), 3), 4);下面理解了大概的意思,就介绍两个和理解Redux源码有关的两个概念。
合成:得到一个结果需要经过n个函数,将这n个函数合并成一个函数的操作叫做函数的合成。
const compose = function (f, g) {
return function (x) {
return f(g(x));
};
}这是两个函数,如果有三个参数,就可以是
1. compose(f, compose(g, h))
2. compose(f, g, h)
3. compose(compose(f, g), h)类似于数学中的结合律
3 + 2 + 3 = (3+2)+3 = 3+(2+3)
当然了这是一种思想,理解就行,暂时还没有涉及到代码层面,Redux中有一个函数用到了这个思想,到时候代码的实现我会再次提到。
柯里化:柯里化概念为将多参数函数转换成单参数函数,就像上面的结合律,要向真正实现代码的结合以及保证纯粹性,函数接收的参数最好只有一个。
// 柯里化之前
function add(x, y) {
return x + y;
}
add(1, 2) // 3
// 柯里化之后
function addX(y) {
return function (x) {
return x + y;
};
}
addX(2)(1) // 3现在深化到了代码的层面,这里引用了JavaScript中非常经典的使用方式,也是框架中必备的--闭包。这里不做过多的解释。
本文引用阮一峰大神的几个例子作为说明:
一个数学表达式 : (1 + 2) * 3 - 4
完成可以分为三个步骤:
1. var a = 1 + 2;
2. var b = a * 3;
3. var c = b - 4;
而函数式编程要把多操作映射成嵌套函数。
var result = subtract(multiply(add(1,2), 3), 4);下面理解了大概的意思,就介绍两个和理解Redux源码有关的两个概念。
合成:得到一个结果需要经过n个函数,将这n个函数合并成一个函数的操作叫做函数的合成。
const compose = function (f, g) {
return function (x) {
return f(g(x));
};
}这是两个函数,如果有三个参数,就可以是
1. compose(f, compose(g, h))
2. compose(f, g, h)
3. compose(compose(f, g), h)类似于数学中的结合律
3 + 2 + 3 = (3+2)+3 = 3+(2+3)
当然了这是一种思想,理解就行,暂时还没有涉及到代码层面,Redux中有一个函数用到了这个思想,到时候代码的实现我会再次提到。
柯里化:柯里化概念为将多参数函数转换成单参数函数,就像上面的结合律,要向真正实现代码的结合以及保证纯粹性,函数接收的参数最好只有一个。
// 柯里化之前
function add(x, y) {
return x + y;
}
add(1, 2) // 3
// 柯里化之后
function addX(y) {
return function (x) {
return x + y;
};
}
addX(2)(1) // 3现在深化到了代码的层面,这里引用了JavaScript中非常经典的使用方式,也是框架中必备的--闭包。这里不做过多的解释。
相关文章推荐
- redux源码解析-函数式编程
- Redux源码解读--(4)compose 和 applyMiddleware
- 【GUI编程之准备--1】MAC 编译wxWidgets 源码
- CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录《第一部分:基础知识与准备工作》
- 深入到源码:解读 redux 的设计思路与用法
- 3000门徒内部训练绝密视频(泄密版)第3课:Scala中函数式编程彻底精通及Spark源码阅读
- redux-applyMiddleware源码解读
- redux系列(二)--- redux源码解读
- redux源码解读(一)自实现简易redux
- TX2平台下can总线收发功能的实现(二)——Linux下can总线编程模型和源码解读
- redux-applyMiddleware源码解读
- 热修复/插件化/组件化-Andfix/Tinker源码简单解读及相关知识剖析笔记
- 比特币源码解析(4) - 准备知识 - libevent & QT
- 比特币源码解析(3) - 准备知识 - Boost
- 编程基础知识之代码解读
- redux源码解读(一)
- c内核源码阅读准备知识(erlang mudos lua)
- node-sqlite3源码分析 - 准备知识 - sqlite3 API使用说明
- redux-actions源码解读
- 【深入Java编程】JVM源码分析之堆外内存完全解读