• 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

           }

    }

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

  • 相关阅读:
    Python学习之路:MINST实战第一版
    Python学习之路:NumPy进阶
    Python学习之路:NumPy初识
    Python学习之路:一天搞定基础部分
    7. 整数反转(leetcode)
    1. 两数之和(leetcode)
    172. 阶乘后的零(leetcode)
    Java模拟斗地主发牌(Collections工具类的应用)
    CF刷题-Codeforces Round #481-G. Petya's Exams
    【android】安卓平台版本和API版本的对应关系
  • 原文地址:https://www.cnblogs.com/luohuayu/p/9211554.html
Copyright © 2020-2023  润新知