函数

1.函数与闭包

func adder() func (value int){
    sum := 0
    return func(value int) int{
        sum += value
        return sum
    }
}

func main() {
    adder := adder()
    for i := 0; i < 10; i++ {
        fmt.Println(adder(i))
    }
}

函数式编程 VS 函数指针

  • 函数是一等公民:参数,变量,返回值都可以是函数
  • 高阶函数
  • 函数 -> 闭包

2.“正统”函数式编程

  • 不可变性:不能有状态,只有常量和函数
  • 函数只能有一个参数
type iAdder func(int) (int, iAdder)

func adder(base int) iAdder {
    return func(value int) (int, iAdder){
        return base+value, adder(base+value)
    }
}

func main(){
    a := adder(0)
    for i := 0; i < 10; i++ {
        fmt.Println(a(i))
    }
}

3.其他语言的闭包

  1. python的闭包
def adder():
    sum = 0
    def f(value):
        nonlocal sum
        sum += value
        return sum
    return f
  • python原生支持闭包
  • 使用__closure__来查看闭包内容
  1. c++的闭包
auto adder() {
    auto sum = 0;
    return [=] (int value) mutable {
        sum += value;
        return sum;
    };
}
  • 过去:stl或者boost带有类似库
  • c++11及以后:支持闭包
  1. java的闭包
Function<Integer, Integer> adder() {
    final Holder<Integer> sum = new Holder<>(0);
    return (Integer value )-> {
        sum.value += value;
        return sum.value;
    };
}
  • 1.8以后:使用Fuction接口和Lambda表达式来创建函数对象
  • 匿名类或Lambda表达式均支持闭包
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。