美文网首页
kotlon中的Lambdas

kotlon中的Lambdas

作者: Dreamboy_a2ef | 来源:发表于2017-07-10 19:03 被阅读0次

    Lambda表达式是一种很简单的方法,去定义一个匿名函数。Lambda是非常有用
    的,因为它们避免我们去写一些包含了某些函数的抽象类或者接口,然后在类中去
    实现它们。在Kotlin,我们把一个函数作为另一个函数的参数。(说了这么多就是想装逼) 直奔主题, 拿 onclick 练练手,先做个对比:
    java :

        button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
                toast("java")
          }
        }
    

    kotlin:

         button.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                toast("kotlin")
            }
        })
    

    Lambdas:

        button.setOnClickListener{
            toast("Lambdas")
        }
    

    简洁,这是我想了解Lambdas的主要原因,下面具体介绍一下:

    一个lambda表达式通过参数的形式被定义在箭头的左边(被圆括号包围),然后在箭头的右边返回结果值。在这个例子中,我们接收一个View,然后返回一个Unit

        fun setOnClickListener(listener : (View)-> Unit)
    

    (Unit 表示没有东西,也可以写要执行的逻辑,比如上面的toast())。所以根据这种思想,我们可以把代码简化成这样(当我们定义了一个方法,我们必须使用大括号包围):

    // 在箭头的左边指定参数,在箭头的右边返回函数执行的结果
    button.setOnClickListener({listener -> Unit})
    

    如果左边的参数没有使用到,我们甚至可以省略左边的参数:

      // 省略左边的函数  为了便于观看,写入一个吐司
      button.setOnClickListener({ toast("Lambdas") })
    

    如果这个函数的最后一个参数是一个函数,可以把这个函数移动到圆括号外面:

      // 移动函数(即大括号中的东西)
      button.setOnClickListener(){ toast("Lambdas") }
    

    并且,最后,如果这个函数只有一个参数,我们可以省略这个圆括号:

      // 省略圆括号
      button.setOnClickListener{ toast("Lambdas") }
    

    定义一个多个参数的方法:

        fun setLambdas(p0 : Int, view : (View)->Unit){}
        // 正常调用(最后一个参数是函数,所以可以将大括号挪出圆括号外面)
        setLambdas(0){view -> Unit}
        // 调用时,最后一个参数View 没有使用
        setLambdas(0){}
    

    相关文章

      网友评论

          本文标题:kotlon中的Lambdas

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