你会学到什么?
通过对本小册的学习,你至少能达到五个目的:
- 充分理解函数式编程的核心思想和基本理念;
- 在现代前端工程的场景中,内化函数式编程的实践方法;
- 会写代码,会写好代码;
- 会面试,能言之有物;
- 会笔试,能把题做对。
课程简介
即使是在瞬息万变的前端领域,也存在一些具备“一次学习,终生受用”特性的知识—— 这是我每本小册的固定开篇语,也是我内心深处用来甄别“好知识/快餐知识”的“金标准”。
“好知识”经得起时间的考验、经得起软件技术快速更迭带来的重重挑战。
“好知识”不仅值得开发者在生产活动中持续实践,更值得技术作者对其进行反复的钻研、拆解和体系化。
具体到这本小册上来说,毫无疑问,函数式编程就是修言价值体系里的“好知识”。
函数式编程,是“优美范式”,更是“进阶套路”。
在 2022 年的今天,我们作为前端工程师,早已或主动、或被动地站在了函数式思想的肩膀上。
为什么 React 选择逐步告别 Class 组件,拥抱“函数组件”?
为什么 Redux 的 Reducer 必须是“纯函数”?
为什么各路前端框架、小程序框架总在强调“不可变值”?
为什么各厂的前端面试中,无论是问答题目还是 coding-test,都开始越来越频繁地考察高阶函数、柯里化、偏函数、compose/pipe 等函数式能力?
归根结底,是因为函数式思想正在以越来越快的速度渗透前端生态。
在遥远的过去,函数式编程对于切图仔来说,或许还只是一门“有点意思”的选修课。
但在2022年的今天,在前端应用复杂度呈指数级增长的现在,函数式编程无疑已经成为前端工程师进阶的必修课。
这背后的趋势,是前端世界,乃至整个软件行业,都在越来越全面、越来越深入地拥抱函数式编程。
既然函数式编程是“写代码”的学问,那么它和我们之前学过的设计模式一样,都属于是编程的“套路”。
事实上,两者之间也确实有许多互通的地方:
- 它们都致力于解决软件设计的复杂度的问题
- 它们的着力点都在于“如何应对变化”
- 它们都引导我们用健壮的代码解决具体的问题、用抽象的思维应对复杂的系统
……
然而,同为“套路”,函数式编程的学习曲线却比设计模式陡峭得多,在面试场景下也具备更高的区分度。
但也正因为都是“套路”,我们曾经用来对付设计模式的那些学习方法,在函数式编程这里仍不过时。
我们整本小册的知识体系与格局,用思维导图展示如下:
在内容表达上,我们仍然会借助大量的图解+编码案例+现实生活中的体验类比,从具体的实践/感知去推导抽象的原理。
在知识结构上,我们仍然会将大的知识体系拆解为“道”与“术”两个分支,知其然,更知其所以然。
此外,在本册中,我还将站在实践的角度,引导大家重新去看待数学与代码之间的关系。
数学之于函数式编程,正如化学之于厨师。
厨师做菜,表面上靠厨艺,原理上靠科技。
这个“科技”不是说他往菜里加了多少添加剂,而是说烹饪这个过程,本身就伴随了许多的化学反应。
比如烤肉那股香味,就来自高温加热蛋白质和碳水触发的美拉德反应;而米饭从生到熟的过程中,会发生糊化反应等等。
成为一个高级厨师,可能需要一些必要的化学常识作为背景,但未必需要精通化学反应原理。
我们程序员写代码,也是如此。
本着“以己之长学人之长”的原则,我 们在学习面向编程的数学时 ,其实不必太拘泥于“由数学去推导数学”这个过程,而应该试着用代码去推导数学。
厨师在做菜的过程中,自然会通过现象去理解食物分子的变化。
而我们在编码的过程中,自然也能够通过代码的行为来理解数学的奥义。
这一点,随着学习的深入,相信大家会有越来越强烈的共鸣。
课程目录
函数式编程导读:升维的”编程套路”
前端视角看编程范式:代码组织の魔法
函数式编程基本功:吃透“纯函数”与“副作用”
思考:函数为何非“纯”不可?
“一等公民”的故事——聊聊 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 设计模式核⼼原理与应⽤实践》、《前端性能优化原理与实践》、《前端算法与数据结构面试》等多本畅销小册作者。