美文网首页
Kotlin高阶函数<一>

Kotlin高阶函数<一>

作者: 安仔夏天勤奋 | 来源:发表于2020-02-09 17:08 被阅读0次

高阶函数

什么样的函数才是高阶函数呢?又怎么使用啊?直接贴上代码:

方式一

fun main(){
    fun test(a:String,display:(String)->Unit){
        display(a)
    }
    //使用
    test("666"){
        //第二个参数是lambda表达式,这个参数可以放后面
    }
}

display:(String)->Unit 既是一个lambda表达式也是一个函数,这就是一个高价函数。这个高阶函数使用时,第二个参数是lambda表达式(即test("666"){}),这个参数可以放后面。

方式二

函数当参数传递

fun main(){
    fun test1(a:()->Unit):Unit{ //函数当参数传递
        //再定义一个函数
        fun test2(){
            a()
        }
        return test2() //test2()作为一个函数返回出去
    }
    
    fun hello(){
        println("hello world")
    }
    //调用
    test1(::hello)
}

a:()->Unit,函数当参数传递,在test1函数内还可以定义函数,也可以将一个函数作返回值返回出去。test1函数还有另一种写法。代码如下:

typealias FunType = ()->Unit
fun main(){
    //另一写法
    fun test3(a:FunType):Unit{ //函数当参数传递
        //再定义一个函数
        fun test2(){
            a()
        }
        return test2() //test2()作为一个函数返回出去
    }
}

Kotlin库中常用的高价函数

  • run{}/T.run{}

    run是一个无参的函数且有一个返回值(返回值的类型是任何类型(泛型))

    fun main(){
        run {
            //执行一块独立代码块
        }
        //T.run  T.() T表示类型  T.()表示扩展函数   相当于给T扩展了一个函数
        val str = "kotlin"
            str.run {
            //这里可以使用str里的属性
            length
        }
    }
    
    
  • with(){}

    with的作用跟run一样

    fun main{
        val str = "kotlin"
        with(str){}
    }
    
    
  • T.apply{}

    返回自己本身,可以接多个apply,

    str.apply {
        length //可以使用str的属性
    }
    .apply {
    }
    .apply {
    }
    
    
  • T.also{}

    T.also的{}里it就代表T

    str.also{
        it.length //it就是代表str
    }
    
    
  • T.let{}

    得到的一系列结果 可以反转回来。

    str.let{
        it.reversed()//得到的一系列结果 可以反转回来
    }
    
    
  • T.taskIf{}

    做了一个条件过滤

    val result = str.takeIf{
      //判断这个str是不是ok开头的  如果是ok开头就返回str 反之返回null
        it.startsWith("ok")
    }
    
    
  • lazy{}

    用到了一个声明处协变 lazy就是如果初始化了返回一个T,如果未初始化则创建一个T。lazy 只能修饰 val 不可变参数,等同于 java 的 final 。

    lazy{
        
    }
    
    

    lazy函数很像java中的懒汉式,饿汉式单倒模式。

协程

后续再添加。。。。

相关文章

网友评论

      本文标题:Kotlin高阶函数<一>

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