hard to test=>pure functions

副作用导致了难以预测 无法信任

fetchJson
console.log

image.png

image.png

image.png

容易测试的例子

可以信任

image.png
image.png

image.png

image.png

image.png

image.png

image.png

hard to follow=>declarative code

imperative 命令式

告诉你一步一步怎么做
image.png
for loop里面很难去理解
image.png

declarative 声明式

告诉机器我要的结果,我不需要写出来步骤
image.pngimage.png

image.png

code breaks unexpectedly=> immutable Data

原因一:Mutable Data 可变的数据

image.png

image.png

image.png

Imuutable Data 不可变的数据

保证了安全性和一致性
image.png

使用Object.freeze

image.png
image.png
image.png

Create New State 创建新的状态

image.png

image.png

image.png

Too much code=>curried,composable functions

重复的函数声明

image.png
接受两个参数
image.png
每次接受一个参数,然后返回新函数
image.png

柯里化函数

偏函数

image.png

image.png
image.png

使用函数组合搭积木

image.png

承载了太多功能的函数

函数有太多的步骤和责任
image.png

使用pipe把责任步骤分担出去

image.png
image.png

image.png
image.png

image.png

image.png

scary to refactor =>strong,static types

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

oh! null => Maybe and monads

image.png
image.pngimage.png

image.png

image.png

image.png

image.png

image.png

Monads

不用担心可能会失败,只用担心一系列操作a流程步骤
image.png

image.png

Recap

image.png