美文网首页
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