美文网首页
Kotlin的函数式编程到底是什么??

Kotlin的函数式编程到底是什么??

作者: super大磊 | 来源:发表于2021-09-28 16:23 被阅读0次

    所谓技术总是不停更新迭代,我们能做的只有马不停蹄的去不断学习。

    上节讲了gradle相比于maven的优点,相信小伙伴们也准备去学了吧。在本节在来一个重磅,Kotlin的函数式编程。什么是kotlin???

    Kotlin(科特林)是一个用于现代多平台应用的静态编程语言,由JetBrains公司开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或iOS),在Java中,是以OOP面向对象编程,Kotlin主要是面向函数式编程,函数可以赋值给变量,也可以作为方法参数,也可以作为函数的返回值,下面一一举例

    1.函数赋值给变量

    Kotlin既然可以将函数赋值给变量,那么函数作为函数返回值,作为参数那就理所应当。多个变量可以同时引用一个函数,可以不使用函数名调用函数了,函数名就可以忽略,完全靠变量来调用函数,那么就可以定义没有函数名的函数,也就是匿名函数,当然也就是Lambda表达式,下面例子中,::可以取出函数的地址,这个例子和函数指针非常类似

    //申明一个函数
    fun add(num1: Int, num2: Int)= num1 + num2
    //调用
    var mAdd = ::add
    mAdd(1,2)
    

    2.函数作为函数的参数

      //申明函数
    fun add2(num1: Int, f: (isTrue: Int) -> Boolean) {
    if (f(num1)) {
        println("1111111")
    } else {
        println("2222222")
    }
    }
    
    fun isEvent(num: Int) = num % 2 == 0
    
    //调用
     add2(22,::isEvent)
    

    3.函数作为返回值

    函数作为返回值是函数式编程中非常重要的,函数可以作为返回值,那么函数内可以定义函数,并且函数可以返回函数内定义的函数。如果一个函数只能返回外部函数,函数内不可以定义函数,那就显得低级了,很多功能也就不能实现了,比如闭包。函数内定义函数,定义内函数作用和功能都很明显,函数可以封装得更好,可以返回内部函数,可以访问函数内的局部变量,因为内函数可以访问外函数的变量,而内函数又可以被作为返回值,这部分就是重要的闭包功能,和变量的作用域相关,下面来举几个例子

    a.返回外部函数
    fun getVoid(num: Int):(x:Int) -> Boolean{
        return  if (num==0) ::isEvent else ::isEvent2
        }
    
    fun isEvent(num: Int) = num % 2 == 0
    
    fun isEvent2(num: Int) = num % 3 == 0
    
    //调用
    val isEvent = getVoid(0)
    val isEvent2 = getVoid(1)
    isEvent(1)
    isEvent2(2)
    
    b.返回内部函数
    fun getVoid(): () -> Unit {
    return {
        println("我是匿名函数函数体")
    }
    }
    

    上边例子是使用了匿名函数,所以没有了方法名和参数,当然也可以这么写

    fun getVoid(): () -> Unit {
    val voids = fun() {
        println("我是函数体")
    }
    return voids
    }
    

    也可以不使用匿名函数

    fun getVoid(): () -> Unit {
       fun inVoid(){
        println("我是函数体")
        }
      return ::inVoid
      }
    

    总结:kotlin的高阶语法糖很吸引人,代码很简洁,相对于java来说,能节省不少代码量,下一篇我们来讲一下Kotlin的扩展函数,以及java常用的接口回调。

    相关文章

      网友评论

          本文标题:Kotlin的函数式编程到底是什么??

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