marp | theme | paginate | header |
---|---|---|---|
true |
uncover |
true |
函数式编程指南 第6章:示例应用 |
第 6 章
《函数式编程指南》
- 不同于命令式的一步一步指令,声明式写的是表达式
- 以SQL为例,没有“先做这个,再做那个”的指令
只有取什么数据的表达式,引擎自己决定如何取数据
// 命令式
const makes = [];
for (let i = 0; i < cars.length; i += 1) {
makes.push(cars[i].make);
}
// 声明式
const makes = cars.map(car => car.make);
- map函数如何具体实现,有很大的自由
- 是what(做什么),不是how(怎么做)
- "使用命令式循环速度要快很多?" JIT编译器的视频链接
// 命令式
const authenticate = (form) => {
const user = toUser(form);
return logIn(user);
};
// 声明式
const authenticate = compose(logIn, toUser);
- 为底层的代码变更留下空间,使得顶层的代码成为了一种高级规范(high level specification)
- 不指定执行顺序,所以适用于并行运算
- 目标:以声明式的、可组合的方式创建示例应用程序
- 需求:浏览器 widget,从 Flickr 获取图片,在页面上展示
// map的结合律
compose(map(f), map(g)) === map(compose(f, g));
- 小而不失真实的应用中运用函数式编程
- 用函数式“数学框架”来推导和重构代码