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