7.1 函数式编程

一、函数式编程与函数指针

  1. 函数式编程是一等公民:参数,变量,返回值都可以是函数

  2. 高阶函数

  3. 函数 → 闭包

二、"正统"函数式编程

  1. 不可变性:不能有状态,只有常量和函数

  2. 函数只能有一个参数

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

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

累加器函数举例

函数名:adder()

参数:无

返回值:func(int) int这个函数

三、闭包的概念

  1. 函数体中:有局部变量与自由变量

    备注:上面的例子中,adder()函数中的i就是局部变量,sum是自由变量

  2. 自由变量可能具有链接关系

  3. 所以,上面的例子中,return返回的内容是一个闭包

四、其他语言中的闭包(累加器)

  1. python

    1. python原生支持闭包

    2. 使用__closure__来查看闭包内容

  2. C++

    1. 过去:stl或者boost带有类似库

    2. c++11及以后:支持闭包

  3. java

    1. 1.8以:使用Function接口和Lambda表达式来创建函数对象

    2. 匿名类或Lambda表达式均支持闭包

Last updated

Was this helpful?