SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

weekly-vol016

函数式编程(Functional Programming),一看这个词,简直就是学院派的典范。前端

以致于从 Lisp 的创世,到 Scheme、Haskell、Clean、Erlang、Miranda、Scala、LOGO、Clojure、Mathematica 甚至 R,它们一出生就站在了鄙视链的顶端,尤为是非纯函数式的 Lisp 老祖和纯函数式的集大成者 Haskell。就如段子里说的,一群程序员自我介绍,当听到“我是写 Lisp 的…”这一句,全部人的注意力都会被吸引。简直是众多程序员想要装逼的顶峰,可见一斑。程序员

学院派的语言方法彷佛只有大学研究里才会使用,但随着技术和时代的发展,JavaScript,这种典型的多范式编程语言,也由面向对象为绝对主导逐渐归入各类函数式编程的特性,这两年的 React、TypeScript、Immutable、underscore、Elm 等等,纷纷加入了函数式编程的大潮。因此这期周刊,咱们就重点引入 JavaScript 的函数式编程,浅入浅出,一窥函数式编程的思想,可能让你对编程语言的理解更加融会贯通一些。编程

浅入

1. 什么是函数式编程?segmentfault

JavaScript 函数式编程(一)JavaScript 函数式编程(二) // 王伟嘉设计模式

这两篇将 JS 函数式编程的典型特性“1. 纯函数概念,函数柯里化和函数的组合;2. 容器和 Functor,Maybe,Monad,Either 以及 IO”由浅及深,一个个地作了介绍,很是不错的入门文章。数组

「所谓的纯函数就是,对于相同的输入,永远会获得相同的输出,并且没有任何可观察的反作用,也不依赖外部环境的状态。」闭包

2. 函数式思想的理解编程语言

《JavaScript 函数式编程》读书笔记 // homkeride

这是做者对《JavaScript 函数式编程》的理解,JS 为何要用函数式编程(数据和行为的关系、专一于过程自己),如何使用函数式编程(一等公民、纯函数、可组合、高阶函数、基于流的编程),可让你更深刻地理解 JS 大量引入函数式方法的思想。函数式编程

译丨JavaScript 与函数式编程 // 文蔺

如今,来进行更细节的分析和理解
展示另外一面的函数式编程思惟:强调将程序状态变化(即反作用 side effect)的次数减到最小,鼓励使用不可变数据(immutable data)和纯函数(pure functions)(“纯”意味着没有反作用的),更倾向于使用声明式的风格(让代码更干净,可读性更强,推理起来更简单)。

3. 特性各个了解

在下函数式编程有何贵干 // 力谱宿云

示例代码清晰,简单明了,让你快速了解 FP 的诸多特性,接下来,再一一分解。

前面提到的纯函数、函数柯里化、函数的组合、偏函数、容器、Functor、Monad、IO 等等,这里都有分别的详细讲解。

浅出

4. 各 JS 方言都有了哪些实践?

译丨函数式 TypeScript // 文蔺

「谈到函数式编程时,可能常被提到的是机制、方法,而不是核心原则。但从根本上来讲,函数式编程就是关于如使用通用的可复用函数进行组合编程。」——做者在重构 TypeScript 代码时使用函数式的一些思考

React.js 的代码中包含了大量函数式思想,好比 Immutable,好比 Redux 的柯里化函数以及代码组合,不妨来看看。

若是你打算开始函数式编程,晦涩的 Monad/Functor 们可能也须要动手写点东西来熟悉,而随着整个 React 社区往函数式方向发展,Elm 做为前端函数式编程的先驱和风向标,毫无疑问是值得去学习和借鉴的。这两个系列,一步步地带你了解如何使用 Elm 构建应用。

5. 函数式的思想在其余语言中的体现

函数式编程在实际生产中发挥着巨大的做用,愈来愈多的语言加入闭包,匿名函数等很是典型的函数式编程的特性,从某种程度上来说,函数式编程正在逐步“同化”命令式编程。

6. 补充阅读

(本期完)


# SegmentFault 技术周刊 #

「技术周刊」是社区特别推出的技术内容系列,一周一主题。周刊筛选的每篇内容,是做者的独到看法,踩坑总结和经验分享。

每周二更新,欢迎「关注」或者「订阅」。你们也能够在评论处留言本身感兴趣的主题,推荐主题相关的优秀文章。

相关文章
相关标签/搜索