ES6语法之函数式编程实现 pipeline
来源:互联网 发布:域名可以做什么 编辑:程序博客网 时间:2024/05/03 22:06
我们的目标是给定一个初始值以后,用pipeline的方法实现不同函数运算的顺序执行,从而得出最终结果。
最终实现应该如下:
var result = pipeline(initialValue, func1, func2, func3...);
首先先写几个函数吧:
var double = n => n * 2;var pow = n => n * n;var pow3 = n => n * n * n;
这里用了ES6中的箭头函数。对于有返回值的函数,用箭头函数写出来简洁而清晰。
函数的顺序执行,就想到了前后的函数必须有联系。
我们可以用Array. reduce( ) 方法。
详细描述请见以下链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
函数式编程的一个基本思想就是,你可以把有返回值的函数当成一个变量在函数中传参调用。
所以我们可以这么写:
funcs.reduce(function(pre,cur){ return cur(pre);}, val);
这里初始值为val, 也就是我们要传入pipeline计算的那个值。
在首次计算中, pre就是 val, 以后的pre值都是前次的return cur(pre);
稍稍动下脑筋,就知道此功能可以实现当前函数调用前次函数的返回值,从而实现流水线调用。
funcs是一个函数数组,第一我们想到的是用Array.push()。
实际上完全不用这么麻烦,可以用 … 运算符实现参数列表到数组的转换,这也是ES6的一个爽点。
貌似说得七七八八了,我们就来封装一下这个函数:
function pipeline(val, ...funcs) { return funcs.reduce(function (pre, cur) { return cur(pre); }, val);}
好,接下来我们直接传参:
var result = pipeline(2, double, pow, pow3); // 4096
完美执行!
可是这就完了吗?
不!这还没有get到函数式变成的精髓。
我们是有追求的屌丝码农。
极简!极简!极简!
那好,咱们就来装个内什么吧。。。
改写下:
var pipeline = (val, ...funcs) => funcs.reduce((pre, cur) => cur(pre), val);
一行代码搞定!
结果一样!
var result = pipeline(2, double, pow, pow3); // 4096
而且所传函数个数不限。
当然,代码的易读性很重要。
所以不装也罢。
0 0
- ES6语法之函数式编程实现 pipeline
- ES6核心内容之语法
- ES6学习笔记之Generator 函数的语法
- React native 之ES6语法(promise,箭头函数)
- es6 Generator函数的语法
- ES6语法实现模板编译
- 《JavaScript ES6函数式编程入门经典》使用JavaScript ES6带你学习函数式编程。
- es6之箭头函数
- ES6之箭头函数
- ES6之箭头函数
- Shell编程语法之四:函数
- ES6 —(Generator 函数的语法)
- ES6 let语法实现闭包
- 用es6语法实现event类
- ES6之Module的语法(1)
- ES6之Module的语法(2)
- ES6之Module的语法(3)
- ES6基础之Class基本语法
- Python Web开发:Django入门学习笔记(1)
- 设计一个程序,为二维数组动态的分配内存空间并且释放内存空间;数组元素的赋值结果如下:
- Hbase优化总结
- SMBus i2c
- Android中RecyclerView设置边框并循环滚动
- ES6语法之函数式编程实现 pipeline
- 排序算法题目
- 第六周:[Leetcode]129. Sum Root to Leaf Numbers
- 前端面试总结
- I2C总线相关_6
- 010editor模板例子解析二进制数据
- 分享一些安卓优秀的开源项目地址
- 第六周:[Leetcode]108. Convert Sorted Array to Binary Search Tree
- jpa保存数据过慢的处理办法