函数式编程(Functional Programming),一看这个词,几乎就是学院派的模范。
以至于从 Lisp 的创世,到 Scheme、Haskell、Clean、Erlang、Miranda、Scala、LOGO、Clojure、Mathematica 以至 R,它们一出生就站在了蔑视链的顶端,迥殊黑白纯函数式的 Lisp 老祖和纯函数式的集大成者 Haskell。就如段子里说的,一群顺序员毛遂自荐,当听到“我是写 Lisp 的…”这一句,所有人的注意力都会被吸收。几乎是浩瀚顺序员想要装逼的巅峰,可见一斑。
学院派的言语要领好像只要大学研讨里才会运用,但跟着手艺和时期的生长,JavaScript,这类典范的多范式编程言语,也由面向对象为相对主导逐渐归入种种函数式编程的特征,这两年的 React、TypeScript、Immutable、underscore、Elm 等等,纷纭到场了函数式编程的大潮。所以这期周刊,我们就重点引入 JavaScript 的函数式编程,浅入浅出,一窥函数式编程的头脑,可以让你对编程言语的明白越发举一反三一些。
浅入
1. 什么是函数式编程?
JavaScript 函数式编程(一) 丨 JavaScript 函数式编程(二) // 王伟嘉
这两篇将 JS 函数式编程的典范特征“1. 纯函数观点,函数柯里化和函数的组合;2. 容器和 Functor,Maybe,Monad,Either 以及 IO”由浅及深,一个个地做了引见,异常不错的入门文章。
「所谓的纯函数就是,关于雷同的输入,永久会获得雷同的输出,而且没有任何可视察的副作用,也不依赖外部环境的状况。」
2. 函数式头脑的明白
《JavaScript 函数式编程》读书笔记 // homker
这是作者对《JavaScript 函数式编程》的明白,JS 为何要用函数式编程(数据和行动的关联、专注于历程自身),怎样运用函数式编程(一等国民、纯函数、可组合、高阶函数、基于流的编程),可以让你更深切地明白 JS 大批引入函数式要领的头脑。
如今,来举行更细节的剖析和明白
展示另一面的函数式编程头脑:强调将顺序状况变化(即副作用 side effect)的次数减到最小,勉励运用不可变数据(immutable data)和纯函数(pure functions)(“纯”意味着没有副作用的),更倾向于运用声明式的作风(让代码更清洁,可读性更强,推理起来更简朴)。
3. 特征各个相识
示例代码清楚,简朴明了,让你疾速相识 FP 的诸多特征,接下来,再一一剖析。
前面提到的纯函数、函数柯里化、函数的组合、偏函数、容器、Functor、Monad、IO 等等,这里都有离别的细致解说。
浅出
4. 各 JS 方言都有了哪些实践?
「谈到函数式编程时,可以常被提到的是机制、要领,而不是中心准绳。但从根本上来说,函数式编程就是关于如运用通用的可复用函数举行组合编程。」——作者在重构 TypeScript 代码时运用函数式的一些思索
React.js 的代码中包含了大批函数式头脑,比方 Immutable,比方 Redux 的柯里化函数以及代码组合,无妨来看看。
假如你盘算最先函数式编程,艰涩的 Monad/Functor 们可以也须要着手写点东西来熟习,而跟着全部 React 社区往函数式方向生长,Elm 作为前端函数式编程的前驱和风向标,毫无疑问是值得去进修和自创的。这两个系列,一步步地带你相识怎样运用 Elm 构建运用。
5. 函数式的头脑在其他言语中的表现
函数式编程在现实临盆中发挥着庞大的作用,越来越多的言语到场闭包,匿名函数等异常典范的函数式编程的特征,从某种程度上来说,函数式编程正在逐渐“同化”敕令式编程。
Swift – Swift 中的柯里化 Currying:Swift 柯里化特征的简朴相识
Scala – Scala 范例参数:多范式言语的模范
Java – Java8 Lambda 本质论 丨 正交设想 丨 Write Lean Programs:Java 的设想形式、λ 演算、设想头脑
Scheme – 怎样完成一个没有名字的递归函数:一个递归激发的思索 – “当函数在还没有定义完全时,为何可以直接挪用的呢?”
6. 补充浏览
(本期完)
# SegmentFault 手艺周刊 #
「手艺周刊」是社区迥殊推出的手艺内容系列,一周一主题。周刊挑选的每篇内容,是作者的独到见解,踩坑总结和履历分享。