函数式编程(Functional Programming,FP)是一种把“计算”看成是对函数的求值、并且尽量避免改变数据的编程范式。它与我们常见的命令式编程(Java、Python 大部分写法)有很大不同。
下面用最简单的方式介绍它的核心思想:
⭐ 核心理念
1. 函数是“第一等公民”
函数可以像普通变量一样:
- 传入另一个函数
- 从函数返回
- 存在数据结构里
例如 Haskell、JavaScript 的 map/filter 就是这种思想。
map (+1) [1,2,3] -- 结果: [2,3,4]
2. 没有“可变变量”
FP 尽量避免:
- 修改变量(没有 i++)
- 修改对象内部状态
一旦数据被创建,就不会被改变(immutable)。
这让代码更可预测,也更容易并行化。
3. 强调“表达式”而不是“步骤”
命令式代码关注步骤:
sum = 0
for x in arr:
sum += x
函数式强调的是表达式结果:
sum arr
4. 纯函数(Pure Function)
纯函数的特点:
- 相同输入永远得到相同输出
- 不会产生副作用(不会打印、不会修改全局变量、不会写文件)
纯函数带来的好处:
- 更容易测试
- 更容易推理
- 可以并行执行
⭐ 函数式编程的优势
- 代码更短、更简洁、更数学化
- 可并行性强(因为没有共享可变状态)
- bug 更少,更容易测试和推理
⭐ 常见语言中的例子
Haskell(纯函数式)
square x = x * x
map square [1,2,3] -- [1,4,9]
JavaScript(支持函数式特性)
[1,2,3].map(x => x * 2)
Python
list(map(lambda x: x+1, [1,2,3]))
⭐ 一句话总结
函数式编程 = 纯函数 + 不可变数据 + 用表达式描述计算,而不是用步骤描述计算。
