X

曜彤.手记

随记,关于互联网技术、产品与创业

吉 ICP 备10004938-2号

《前端函数式演进》读书笔记


近几年不知道是刮什么风,“函数式”这个概念在前端开发领域变得愈发火爆,仿佛你不懂一点函数式、Monad 相关的知识,就已经与这个圈子脱节。而对于一个短时间内不准备看 SCIP 的人来说,希望能够通过这本“前东家”同事的著作,让自己入个 FP 的门。

第 1 章 - 编程范式和前端体现

  1. (Page:9)常见编程范式:

- 以 JavaScript 为例

// without reflection.
class Foo { bar() { console.log('Foo.bar called!'); }}
const foo = new Foo();
foo.bar();

// with reflection.
const foo = Reflect.construct(Foo, []);
const bar = Reflect.get(foo, 'bar');
Reflect.apply(bar, foo, []);

// with "eval".
eval('new Foo().bar()');

- JavaScript 元编程分类

第 2 章 - 前端函数式基础概念

  1. (Page:34)JavaScript 中的函数式

- 语言相关概念

- 基于高阶函数的编码优化

// 'hypot' is a binary function.
const hypot = (x, y) => Math.sqrt(x * x + y * y);

// 'thunk' is a function that takes no arguments and, when invoked, performs a potentially expensive
// operation (computing a square root, in this example) and/or causes some side-effect to occur.
const thunk = () => hypot(3, 4);

// the thunk can then be passed around without being evaluated...
doSomethingWithThunk(thunk);

// ...or evaluated.
thunk(); // === 5

- 基于工具和标准的再加工

  1. (Page:52)函数式的抽象单元:

第 3 章 - 函数式思维和前端特征

  1. (Page:70)函数式一般会基于要发生的“过程”,偏向于把状态处理集中在过程的一端,尽量理想化地将其处理成过程的输入参数,将副作用集中在过程的另一端作为输出结果。函数式语言的设计出发点偏向于研究怎么把“过程”进行组合、拼装和复用,这个过程最好没有外部状态参与。
  2. (Page:77)两种编程时对过程进行高度抽象的方式:

第 4 章 - Monadic 编程和它的范畴理论

  1. (Page:119)Monadic
function Just(value) {
  this.value = value;
}
Just.of = function(value) {
  return new Just(value);
}
Just.prototype.map = function(f) {
  return Just.of(f(this.value))
}
const numA = 21;
const addThree = x => x + 3;
const nJustA = Just.of(numA);
const nJustB = nJustA.map(addThree);
Just.prototype.ap = function(cjust) {
  return cjust.map(this.value)
}
const justAddThree = Just.of(addThree);
justAddThree.ap(nJustA);  // 结果仍然得到 Just 对象;

第 5 章 - 函数式工具形态演进

  1. (Page:161)Async/Await 函数使得函数式的调用过程得以简化,其思想契合函数式,非常适合时序不受外部影响,且对外部没有显著副作用的过程。

(其他章节略)



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)