JavaScript 函数式编程实践指南,升维的编程“套路”学,用接地气的姿势理解函数式思想

你会学到什么?

通过对本小册的学习,你至少能达到五个目的

  1. 充分理解函数式编程的核心思想和基本理念;
  2. 在现代前端工程的场景中,内化函数式编程的实践方法;
  3. 会写代码,会写好代码;
  4. 会面试,能言之有物;
  5. 会笔试,能把题做对。

课程简介

即使是在瞬息万变的前端领域,也存在一些具备“一次学习,终生受用”特性的知识—— 这是我每本小册的固定开篇语,也是我内心深处用来甄别“好知识/快餐知识”的“金标准”。

“好知识”经得起时间的考验、经得起软件技术快速更迭带来的重重挑战。

“好知识”不仅值得开发者在生产活动中持续实践,更值得技术作者对其进行反复的钻研、拆解和体系化。

具体到这本小册上来说,毫无疑问,函数式编程就是修言价值体系里的“好知识”。

函数式编程,是“优美范式”,更是“进阶套路”
在 2022 年的今天,我们作为前端工程师,早已或主动、或被动地站在了函数式思想的肩膀上。

为什么 React 选择逐步告别 Class 组件,拥抱“函数组件”?

为什么 Redux 的 Reducer 必须是“纯函数”?

为什么各路前端框架、小程序框架总在强调“不可变值”?

为什么各厂的前端面试中,无论是问答题目还是 coding-test,都开始越来越频繁地考察高阶函数、柯里化、偏函数、compose/pipe 等函数式能力?

归根结底,是因为函数式思想正在以越来越快的速度渗透前端生态

在遥远的过去,函数式编程对于切图仔来说,或许还只是一门“有点意思”的选修课。

但在2022年的今天,在前端应用复杂度呈指数级增长的现在,函数式编程无疑已经成为前端工程师进阶的必修课。

这背后的趋势,是前端世界,乃至整个软件行业,都在越来越全面、越来越深入地拥抱函数式编程。

既然函数式编程是“写代码”的学问,那么它和我们之前学过的设计模式一样,都属于是编程的“套路”。

事实上,两者之间也确实有许多互通的地方:

  • 它们都致力于解决软件设计的复杂度的问题
  • 它们的着力点都在于“如何应对变化
  • 它们都引导我们用健壮的代码解决具体的问题用抽象的思维应对复杂的系统
    ……

然而,同为“套路”,函数式编程的学习曲线却比设计模式陡峭得多,在面试场景下也具备更高的区分度。

但也正因为都是“套路”,我们曾经用来对付设计模式的那些学习方法,在函数式编程这里仍不过时。

我们整本小册的知识体系与格局,用思维导图展示如下:

JavaScript 函数式编程实践指南,升维的编程“套路”学,用接地气的姿势理解函数式思想

在内容表达上,我们仍然会借助大量的图解+编码案例+现实生活中的体验类比,从具体的实践/感知去推导抽象的原理。

在知识结构上,我们仍然会将大的知识体系拆解为“道”与“术”两个分支,知其然,更知其所以然。

此外,在本册中,我还将站在实践的角度,引导大家重新去看待数学与代码之间的关系。

数学之于函数式编程,正如化学之于厨师。

厨师做菜,表面上靠厨艺,原理上靠科技。

这个“科技”不是说他往菜里加了多少添加剂,而是说烹饪这个过程,本身就伴随了许多的化学反应。

比如烤肉那股香味,就来自高温加热蛋白质和碳水触发的美拉德反应;而米饭从生到熟的过程中,会发生糊化反应等等。

成为一个高级厨师,可能需要一些必要的化学常识作为背景,但未必需要精通化学反应原理。

我们程序员写代码,也是如此。

本着“以己之长学人之长”的原则,我 们在学习面向编程的数学时 ,其实不必太拘泥于“由数学去推导数学”这个过程,而应该试着用代码去推导数学

厨师在做菜的过程中,自然会通过现象去理解食物分子的变化。

而我们在编码的过程中,自然也能够通过代码的行为来理解数学的奥义。

这一点,随着学习的深入,相信大家会有越来越强烈的共鸣。

课程目录

函数式编程导读:升维的”编程套路”
前端视角看编程范式:代码组织の魔法
函数式编程基本功:吃透“纯函数”与“副作用”
思考:函数为何非“纯”不可?
“一等公民”的故事——聊聊 First-Class Function
不可变数据:函数纯度的“安全帽”
“安全帽”的使用哲学——不可变数据实践指南
掌握“快照”思维——如何像创建一个 git commit 一样创建数据变更?
思考:持久化数据结构,是 Immutability 的唯一答案吗?
拓展:剖析 Immer.js 工作原理与设计模式
因为 DRY,所以 HOF
你不知道的 Reduce:函数式语言的“万金油”
理解声明式数据流:从链式调用到“回调地狱”
深入函数组合(Composition)思想:compose/pipe 是如何实现的
“多元函数”解决方案:从编码工具视角看偏函数&柯里化
套娃の艺术:如何构造一个通用的 curry 函数?
范畴论启发下的函数设计模式——一个数据盒子的故事
Functor(函子):“盒子模式”构造函数组合链
Monad(单子):“嵌套盒子”问题解法
连点成线的艺术:Semigroup(半群) 与 Monoid(幺半群)
从数学理论到函数组合:Monoid、Compose 中的复合本质
面向对象 vs 函数式:软件复杂度问题的两种解法
函数式思维在 React 框架设计中的实践
函数式思维在 React 应用研发中的实践
函数式思维在前端状态管理中的实践
现代前端生态中的函数式编程
前方的路

讲解介绍

言,某外企前端 Leader,前阿里巴巴/滴滴出行/创业团队前端工程师。
始终战斗在前端工程、研发质量和性能优化的第一线,拥有丰富的研发经验、面试经验和业务架构经验。
深耕技术写作 5 年,专治各种疑难杂症,是《JavaScript 设计模式核⼼原理与应⽤实践》、《前端性能优化原理与实践》、《前端算法与数据结构面试》等多本畅销小册作者。

Like (0)
Previous 2023年3月6日 下午10:14
Next 2023年3月7日 上午9:27

相关推荐

发表回复

Please Login to Comment