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倍,並且更加容易理解它所做的事情。

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