golang学习笔记(7)--函数式编程

一、 函数。

go语言中函数定义形式类似于python中的函数,如下是go语言中的函数定义:

func myfun() string {

       return ""

}

这是一个普通函数的定义,与其他语言一样,是一个代码块。

二、 函数是一等公民

上面说了go语言的函数是一个代码块,其实go语言中的函数与数据类型一样属于一等功能,他不光是一个代码块,他可以作为参数返回,传入等等。如下我们来写一个函数是一等公民的例子:

func myfun() func(){

       return func() {

              fmt.Println("函数被调用了")

       }

}

该函数的返回值是一个函数,这个函数需要一个函数类型变量来接收:

a := myfun() //返回一值是一个函数

a() //调用函数

如上是这个函数的具体操作。

三、 闭包。

函数成为一等公民,那么闭包的概念自然而然就要出来了。闭包的概念需要包括自由变量,局部变量,如下:

func myfun1() func(int) int{// 函数体

       sum := 0 //自由变量,只要被内部调用了就不会被释放

       return func(i int) int{ // i 是局部变量

              sum += i

              return sum

       }

}

如上是一个闭包,闭包是一个结构,他被指向的这个变量只要不换指向,那么自由变量就不会被释放,如下看:

       f := myfun1()//同样的函数调用

       fmt.Println(f(1)) // 1

       fmt.Println(f(5)) // 1 + 5

       myfun1()//函数调用完了内部变量就被释放了,不会被继续调用,除了自由变量。

四、 函数式编程。

将函数作为一等公民,go语言支持函数式编程,函数式编程是与命令式编程对立的一种编程方式,这种方式我现在无法理解透彻,做个基本的函数式编程操作吧:

type myfun func(int) (int,myfun)

func dofun (base int) myfun {

       return func(i int) (int, myfun) {

              return base + i, dofun(base + i)

       }

}

采用递归的编程方式实现与上述加和的策略。

五、 闭包的应用。

这里就写一个简单的应用吧,函数编程真的需要时间。

斐波拉契;

func fib() func() int{

       a,b := 0,1

       return func() int {

              a,b = b,a+b//内部调用

              return a

       }

}

我想采用函数式编程个概念来改写:(对函数式编程还是不理解,以后来写吧。)

猜你喜欢

转载自www.cnblogs.com/luohuayu/p/9211554.html
今日推荐