函数高级玩法

作者: mick_ | 来源:发表于2019-05-09 13:11 被阅读0次

    函数的功能

    • 是一种对一组输入,输出进行模板化的重要工具,比接口类型更加轻量级,灵活
    • 函数主要用于封装代码块,分割功能,解耦逻辑,由于够支持头等函数,所以还可以化身为普通函数,在其他函数间传递,赋值变量,做类型判断和转换(函数值可当成随意传播的独立组建)

    头等公民

    支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值,go语言支持这种机制,故称为头等函数。

    函数签名

    函数签名是指函数的参数列表+结果列表的统称,只要参数列表+结果列表一致即可认为函数签名相同,主要用于鉴别不同函数的特征,同事也定义了我们与函数的交互方式(即怎么使用函数)

    高阶函数

    高阶函数是指满足 接受其他的函数作为参数传入或 把其他的函数作为结果返回即可认为是高阶函数

    闭包函数

    若一个函数引用的自由变量,并被当做参数或结果使用,则此函数被称为闭包函数
    自由变量是指变量不在函数的参数或结果中,也不再函数体中声明,是外部变量的引用,则此变量在闭包中被称为自由变量


    61f3689a0023e83407ccae081cdd8108.png

    闭包的意义? 表面上看仅仅是延迟实现了一部分程序的逻辑或功能而已,实际上,我们是在动态的生成部分程序逻辑

    案例-斐波那契

    // 1 1 2 3 5 8
    func fibonacci()func()int{
        a,b :=0,1
        return func()int{
            a,b = b,a+b
            return b
        }
    }
    

    案例-函数实现接口

    type Reader interface{
        Read()
    }
    type MyReader func()
    func(m MyReader) Read(){
        fmt.Println("hello")
    }
    func PrintReader(r Reader){
        r.Read()
    }
    func main(){
        var m  MyReader
        PrintReader(m)
    }
    

    案例-左右遍历

    type Node struct{
       left *Node
       name string
       right *Node
    }
    func(n *Node) Traverse(){
       if n == nil{
           return
       }
       n.left.Traverse()
       fmt.Println(n.name)
       n.right.Traverse()
    }
    
    func main(){
       n := Node{
           name:"parent",
           left:&Node{name:"left"},
           right:&Node{name:"right"},
       }
       n.Traverse()
    }
    

    相关文章

      网友评论

        本文标题:函数高级玩法

        本文链接:https://www.haomeiwen.com/subject/ijkeoqtx.html