kotlin lambda表达式

使用kotlin lambda表达式可以大大的优化java代码

举个view监听点击事件的例子

java版

view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(
                        v.getContext(),
                        "Click",
                        Toast.LENGTH_SHORT).show();
            }
});

kotlin 版

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

虽然toast可以使用扩展函数,但是好像也没有简化多少代码啊!

下面我们就一步一步的使用lambda表达式,看看能优化到什么程度。

首先我们先认识一下是什么lambda表达式

核心思想:
接口中包含单个函数,那么此接口可以被替代成一个函数,
使用这个函数作为另一个函数的参数

声明方式
fun setOnClickListener(listener:(View)->Unit)

这里listener接口就是被可以被转换成lambda表达式形式的函数,
作为setOnClickListener函数的参数。
箭头左边是参数,箭头右边是返回值。

使用lambda表达式的kotlin版

1.

我们接口的匿名实现被替代成一个方法,所以使用大括号包围
箭头左边指定参数,箭头右边返回函数执行结果。

view.setOnClickListener ({ view->toast("Click") })

2.

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

view.setOnClickListener({toast("Click")})

3.

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

view.setOnClickListener () {toast("Click") }

4.

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

view.setOnClickListener {toast("Click") }

使用这种函数式变成可以让原来的java简短了5倍,并且更加容易理解它所做的事情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章