前端函数式演进
上QQ阅读APP看书,第一时间看更新

1.7 函数式编程

函数式编程(Functional Programming)是基于λ演算(Lambda Calculus)的一种编程语言模式,它的实现基于λ演算和更具体的α-等价、β-归约等设定。虽然函数式编程和传统命令式语言(C类)基于完全不同的推导逻辑,但是可以做到一样的事物表达(图灵完备),它们的理论基础不同,感兴趣的读者可以自行了解。

逻辑和演算上的推导对于研发人员有一定的跨领域难度。我们可以将关注点集中到一些工程模型、表现形式和在前端的积极影响上,本书后面章节会逐渐展开这些内容。

因为我们关注输入和输出的结果多过关注实现的过程,所以函数式编程通常包含在声明式编程中。函数式编程将计算机运算视为数学上的函数计算,并且会避免使用程序状态以及易变对象。

常见的函数式编程语言有经典的Lisp系列(Clojure、Scala,见代码清单1-6)、Haskell、OCaml等。

代码清单1-6 Lisp简单示例


(define (* a b))
  (if (= b 0)
    0
    (+ a (* a (- b 1))))

具体到前端层面,函数式编程在很多工具框架层面都有良好的表现,比如React可以帮助我们更好地约束副作用,进而基于函数迭代,生成整个前端系统。在前端范畴下我们还可以关注jQuery、Lodash、RxJS等工具和语言,它们和React一样具有函数式思想,这些内容的演进是本书讨论的重点。

在前端发展初期,我们在学习JavaScript时会看到很多括号,这些括号里大多是函数的声明、调用,甚至是自执行函数。这说明在设计之初,函数式特性就是JavaScript作为多范式语言的重要考量。不考虑工具库,从原生语言角度来看,JavaScript语言特征中契合函数式思想的内容有一等公民函数(First-class function)、Lambda表达式、闭包、数组组合子等。

落实到编码上,我们要从模块封装、状态表达、编码形态等方面做出更多考量,这些考量驱动了前端工具快节奏迭代。