wangsiyuan0215 / blog

Personal blog as F2E for recoding issues in my jobs and harvest in my daily life.
5 stars 0 forks source link

《Let’s experiment with functional generators and the pipeline operator in JavaScript》 #7

Open wangsiyuan0215 opened 5 years ago

wangsiyuan0215 commented 5 years ago

《Let’s experiment with functional generators and the pipeline operator in JavaScript》

pipeline: streamlining chained function calls in a readable, functional manner.

  1. pipeline 目前仍然是实验性质的特性,项目中如果想要用到该特性的话,需要使用 babel 的插件 babel/plugin-syntax-pipeline-operator 进行编译;

  2. pipeline 是一种提高数据转换的效率的开发方式,从调用方式、子函数接参方式和功能的角度来说,与 FP 的 flow 相同;

  3. pipelineflow 之间的区别就是 pipeline 的子函数可以返回函数pipeline 会根据函数返回值类型判断是否继续执行该子函数),而 flow 仅会执行一次子函数(不论子函数是多少阶的函数);

  4. pipeline in babel 具有 3 种提案,分别为 minimal / fsharp / smart:

    • minimal:包含了基本的 pipeline 的功能,不包含 awaitplaceholder|> \array_filter($$, $x==> $x % 2 == 0) 中的 $$);
    • fsharp:同样的包含了 mininal 提案的内容,而且不支持 placeholder,但是可以使用箭筒函数替代 placeholder|> (_ => add(7, _)) 即转换为一个单一入参的函数),但是对于 await 是支持的,但是在使用方法上有些出入,promise |> await 即在 |> 的右边单独使用 await 会等待上一个 |> 异步函数执行完毕(一元函数)。
    • smart:不仅包含了 minimal,同时还支持 placeholder(使用 # 作为占位符,代表上一个 |> 执行后返回的结果) 和 await
  5. fsharp 和 smart 目前 babel 还未支持。