我如何开始学习函数式编程

2025-06-09

我如何开始学习函数式编程

我曾在博客上宣布,我将与大家分享我决定深入研究函数式编程的原因和过程。今天就是这个日子!我将带领大家沿着我的足迹,理解函数式编程的基本概念。


开始

我第一次与函数式编程 (FP) 有意义的接触是在弗罗茨瓦夫当地的 TypeScript 聚会上。在那里,我听到了Józef Flakus向我们讲述了函数式编程 (FP) 的核心概念。之后,我们讨论了函数式编程 (FRP) 的概念,以及它在MarbleJS(一个用于创建服务器端应用的框架)中的应用。事实上,Józef 正是这个框架的创建者。听到他的观点真的很棒。这些概念对我来说完全是全新的,因为(事实证明)我拥有 100% 命令式编程的思维模式。

当天的第二场演讲由Tomasz Ducin主讲。他向我们展示了如何在 TypeScript 中实现函数式组合。这是一场精彩的现场编程课程,但是……我完全不知道他在说什么 😉 第二天,我一直在研究 Tomasz 编写的代码,直到我完全理解他在说什么。

但这些谈话让我豁然开朗。我顿悟了,在接下来的几个月里,我开始一步步深入 FP 的世界。


我的第一个资源

我做的第一件事就是在Awesome GitHub 仓库里寻找一些基础的函数式编程文章或视频。结果果然不出我所料。我找到了两个有趣的网站:Awesome Functional ProgrammingAwesome FP JS。在那里你可以找到很多可靠的资源,但其中很多对于函数式编程新手来说似乎过于硬核,所以要谨慎选择。

我还想与你们分享一些值得尊敬的文章/视频/教程。

>>与 Brian Beckman 的“不要害怕 monad”对话

直到今天,我还记得看视频时惊讶的表情。一个小时根本不够!布莱恩真是个天才,他拥有非凡的吸引听众的技巧。他能用几句话,用一种有趣的方式解释一些难以理解的概念。看完这个视频,我对这个主题的迷恋又加深了。

>> “Haskell 没用”——与 Erik Meijer 和 Simon Peyton Jones 的对话

与 Haskell 语言的两位设计者探讨 Haskell 在编程界的地位。我们还将获得一张著名的图表,解释命令式语言和声明式语言之间的关系。

>> LambdaCast 播客

我花了几周时间才听完所有剧集,但哇,太值得了!大约20集的播客节目中,主持人和嘉宾以通俗易懂的方式讲解了函数式编程的核心概念和原理。对于像我这样没有任何基础的人来说,这简直是完美的入门方式。

>>函子、应用函数和单子图解

学习新知识的另一种方法是通过可视化。由于简单易懂,这是我最常用的资源。

>> Scott Wlaschin 的“函数式编程设计模式”演讲

关于 FP 与 OOP 的原理和模式的关系的深刻而有趣的谈话。

>> Brian Lonsdorf 著的《函数式编程基本指南(JS 版)》

这是我最喜欢的资源。如果你有 JavaScript 背景(像我一样),这是一个很棒的教程。由于 JavaScript 是一种多范式语言,用 JavaScript 解释函数式编程非常容易。我花了不少时间仔细阅读了这本书,反复阅读了各个章节并研究了示例。我认为没有什么比这本书更能加深我对这个主题的理解了,尤其是它包含了许多实际示例。我建议通过 GitBooks 阅读——你可以在浏览器中完成所有练习,而无需克隆整个代码库。

这些是我迄今为止找到的关于FP最重要的资源。如果你知道其他有趣的资源,请随时与我和其他人分享😊

最后,我想给你一些建议,这可能会节省你谷歌搜索的时间😉


选择哪种语言来开始我的 FP 之旅?

我认为这里没有不好的答案。你应该先想想你想做什么,然后再构建这门语言。如果你想创建一些 Web 应用程序,或许可以试试Elm。我个人是从 Elm 开始的,我正在练习创建一个简单的食谱应用程序。

如果您想为 Web 开发,不妨使用Elixir,它自带的 Phoenix 框架可以同时处理前端和后端。如果您想深入研究函数式编程 (FP) 理论,可以使用PureScript(我的下一个个人选择)或Haskell。(PureScript 对我来说更有吸引力,因为它可以编译成 JS,并且使用相同的生态系统。)

如果您有 JS 背景,并且不想学习任何新语言,可以使用 JavaScript 的函数式编程库 ( Ramda ) 或 TypeScript 的函数式编程库 ( fp-ts )。此外,还有一些使用函数式编程来构建 Web 项目的 JS 框架,例如 MarbleJS(REST API)或 CycleJS(Web 应用)。


我为什么应该对 FP 感兴趣?

原因如下:

  • 函数式意味着声明式——声明你想做什么,剩下的交给编译器。我发现函数式程序比其他程序更具描述性。
  • 函数式编程 (FP) 确保了变量的不变性。变量一旦创建,就无法更改。这样一来,你就不用担心不断地传递对象的引用,并在不知不觉中改变它了。
  • 函数就像积木一样——你可以拥有很多积木,形状随意。就像搭乐高积木一样,开始搭建吧。
  • 纯函数有助于防止错误。想象一下,你的函数没有任何意外行为——不是吗?
  • FP 简化了单元测试。将大部分函数设置为纯粹函数,可以简化测试场景并确保测试分离。
  • 它能拓宽你的思维,让你尝试新事物。它能给你新的视角,让你成为一个更可靠的工程师。这样的思维转换对任何开发者来说都是一个巨大的挑战。
  • 函数式编程 (FP) 技术正以前所未有的速度发展。它们越来越受欢迎,在生产应用中也越来越常见。企业也越来越需要具备函数式编程知识的人才。

我查看了您提供的所有资源 - 下一步我应该做什么?

好吧,我不知道,当我写这篇文章时我自己才想到这一点 😉 我肯定会与你们分享我学到的任何有趣的东西。


⚡️ 最初发布于kajetan.dev ⚡️

鏂囩珷鏉ユ簮锛�https://dev.to/kajetansw/how-i-started-learning-function-programming-4k5b
PREV
使用 VIM 开发 JS/TS
NEXT
使用 linters、prettier 和 husky 升级你的项目