Daibor Cyber Space
学习笔记、思考和记录
JavaScript 函数式编程笔记
《JavaScript ES6 函数式编程入门经典》笔记

《JavaScript ES6 函数式编程入门经典》-Anto Aravinth-清华大学出版社

Chapter 1

数学中如何定义函数?

  • 接收参数;
  • 返回值;
  • 依据参数而非外部环境运行;
  • 输入对应唯一输出;

如何进行函数式编程?

  • 编写纯函数,避免使函数功能依赖于全局变量;

    • 使用参数传递
  • 使用声明式而非命令式编程,

    前者告诉编译器做什么,而不是如何做、后者告诉编译器如何做;

    • 例如:for循环与 forEach 方法
  • 组合功能单一的纯函数——函数式组合(Functional Composition);

函数式编程的好处?

大多来自于编写纯函数

  • 更加容易测试;
  • 可以缓存结果;
  • 没有并发困扰;

纯函数是什么?

  • 不改变任何外部环境变量;
  • 我们不需要了解 Math.max(2,3,4) 的内部细节,便能给出结果,这就是纯函数的魅力;
  • 实际上,命令也是一种纯函数,接收参数、返回输出,不改变外部环境;
  • 纯函数应该被设计为只做一件事;

两个重要的概念/特点

  • 引用透明性(Referential Transparency):相同输入返回相同值;
    • 来自分析哲学,用另一个引用相同实体的词语替换上下文的词语,不会改变句子含义。
  • 替换模型(Substitution Model):因为每个输入只对应一个特定结果,因此可以直接用函数结果替换函数表达式,这个过程就是替换模型;

一些启发性观点

  • 同步的问题是由并发运行时共享全局变量导致的;

    • 这里也有问题,同步访问全局变量的需求能完全被参数传递替代吗?
  • UNIX 中,通过将单一命令组合完成复杂任务

    cat jsBook | grep -i "composing" | wc
    

Last modified on 2020-04-30