“正统"函数式编程
-
不可变性:不能有状态,只有常量和函数
-
函数只能有一个参数
// 正统函数式编程 type iAdder func(int) (int, iAdder) func adder(base int) iAdder { return func(v int) (int, iAdder) { return base + v, adder(base + v) } }
Go 函数式编程
-
函数是一等公民:参数,变量,返回值都可以是函数
-
高阶函数
-
闭包
// 闭包 func adder() func(v int) int { sum := 0 return func(v int) int { sum += v return sum } }
Python 闭包
def adder():
sum = 0
def f(v):
nonlocal sum
sum += v
return sum
return f
原生支持闭包
使用
_closure_
来查看闭包内容
C++闭包
auto adder() {
auto sum = 0;
return [=] (int value) mutable {
sum += value;
return sum;
}
}
过去:stl或者boost带有类似库
c++ 11及以后原生支持闭包
Java闭包
Function<Integer, Integer> adder() {
final Holder<Integer> sum = new Holder<>(0);
return (Integer value) -> {
sum.value += value;
return sum.value;
};
}
1.8后:使用Function接口和Lambda表达式来创建函数
匿名类或Lambda表达式均支持闭包