函数式编程中的关键概念与数据结构
1. 内部纯度与外部纯度
在函数式编程里,若多次以相同的 x 值调用 sin(x) ,每次都重新计算相同的值会造成资源浪费。即便在“纯”函数式库中,像缓存先前计算的值(有时称为记忆化)这类内部优化操作也很常见。不过,缓存会引入副作用,因为缓存的状态会被修改。但这种纯度的缺失对用户而言应是不可见的(或许在性能影响方面除外),实现者有责任维护“契约”,即线程安全和引用透明性。
2. 递归
递归在纯函数式编程中的作用比在命令式编程中更为重要。由于不能使用可变的循环计数器,递归是实现“循环”的纯函数式方式。以计算阶乘为例,以下是 Java 中使用命令式循环的实现:
// src/main/java/progscala2/fp/loops/Factorial.java
package progscala2.fp.loops;
public class Factorial {
public static long factorial(long l) {
long result = 1L;
for (long j = 2L; j <= l; j++) {
result *= j;
}
return result;
}
public static void main(String args[]) {
for (long l = 1L; l <= 10; l++)
System.out.printf("%d:\t%d\n", l, factorial
超级会员免费看
订阅专栏 解锁全文

1万+

被折叠的 条评论
为什么被折叠?



