发布于2026-07-21 阅读(0)
扫一扫,手机访问
函数式编程(Functional Programming, FP)听起来可能有点学术,但说白了,它就是一种把函数当作“一等公民”的编程范式。核心思想是:把计算看成数学函数的组合,尽量避免状态变化和可变数据,靠纯函数和不可变性来构建整个程序。下面就来详细聊聊函数式编程,顺便和几个主流范式做个对比,看看它们各自擅长什么、短处在哪里。
纯函数(Pure Functions)
输入相同,输出必然相同——这就叫“无副作用”。而且它不会去碰外部状态,比如全局变量、传入的参数本身。举个例子:sum(a, b) { return a + b; } 就是典型的纯函数,你给它什么,它返回什么,绝无意外。
不可变数据(Immutable Data)
数据一旦创建,就不可修改。如果真需要“变化”,那就生成一个新数据,而不是直接改原数据。比如用 map 生成新数组,而不是用循环去修改原数组。
高阶函数(Higher-Order Functions)
函数可以当作参数传给另一个函数,也可以作为返回值。日常开发中常见的 map、filter、reduce 都是典型的高阶函数。
声明式风格(Declarative)
关注“做什么”,而不是“如何做”。比如用 filter 过滤数据,你只需要告诉它“过滤条件是什么”,而不需要手动写循环、维护索引。
递归代替循环
函数式编程倾向于用递归来处理迭代,避免使用可变状态——因为循环通常需要修改变量,而函数式想方设法避开它。
特点:关注“如何做”,通过一条条指令来改变程序状态。最典型的例子就是 C 或 Python 里的 for 循环。
sum = 0
for num in list:
sum += num
特点:以对象和类为核心,通过封装、继承、多态来组织代码。Ja va、C++ 是其代表。
class Calculator {
int add(int a, int b) { return a + b; }
}
特点:以过程(函数)为中心,按步骤执行,依赖共享状态。早期的 C 语言就是这种风格。
void calculateSum(int[] arr) {
int sum = 0;
for (int i=0; i
特点:描述目标而非步骤,函数式编程其实是它的一个子集。SQL 就是典型例子——你只需要写 SELECT name FROM users WHERE age > 18;,数据库自己知道怎么去查。
特点:通过逻辑规则和事实来推导结果。Prolog 是这方面的代表。
parent(john, bob).
ancestor(X, Y) :- parent(X, Y).
特点:通过类型参数化实现代码复用。C++ 模板、Ja va 泛型都是这个思路。
template
T max(T a, T b) { return a > b ? a : b; }
map/filter、Spark 的函数式 API 都是典型应用。通过对比可以看出,函数式编程通过数学化的函数组合和不可变性,提供了一种高可维护性的代码组织方式。但现实开发中,几乎没有哪个项目是纯函数式的——往往需要结合其他范式来平衡灵活性与效率。了解这些范式的核心差异,能帮你做出更合适的技术选型,而不是盲目追求“最潮”的写法。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8