kotlin学习笔记——lambda表达式
生活随笔
收集整理的這篇文章主要介紹了
kotlin学习笔记——lambda表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先簡單說說lambda表達式:
(Type a, Type b, ...) -> {...}
左邊是參數(參數類型可省略),如果只有一個參數括號也可以省略,右邊是函數體和返回結果(大括號可省略)。
如:
int add(int a, int b){ return a + b;
} 可以寫成 (a, b) -> a+b
以click為例,在kotlin中,匿名內部類可以:
view.setOnClickListener(object: OnClickListener{override fun onClick(view: View){toast("test")}
}) 通過lambda簡化為
(在kotlin中如果一個Interface包單個函數可以被替代為一個函數)
view.setOnClickListener({view -> toast("test")}) ? ?//用大括號將lambda匿名函數包圍
如果左邊的參數沒有使用,也可以省略
view.setOnClickListener({ toast("test") })
如果函數的最后一個參數是一個函數,可以放在括號后面
view.setOnClickListener() { toast("test") }
如果函數只有一個參數,可以省略括號
view.setOnClickListener{ toast("test") }
1、it引用
另外一種情況當左邊的參數被使用時,且函數只有這一個參數,如
view.setOnClickListener({ view -> toast(view.tag.toString()) })
這時候可以用it引用來代替這個參數,可直接簡化為
view.setOnClickListener{ toast(it.tag.toString()) }
2、lambda匿名函數聲明
var obj: (Type, Type, ...) -> Type
左邊是參數類型,可以有多個但是括號不能省略。右邊是返回類型,如果是空則是Unit。如:
setListener(var item: Item, var listener: (Item) -> Unit){view.setOnClickListener{ listener(item) }
} 注意:在這里應該是view.setOnClickListener{ view -> { listener(item) } },是在OnClickLisrener的OnClick函數中執行lisrener(item)的,但是由于view未使用所以可以繼續簡化成上面的樣子
使用時:
setListener(item) { toast(it.name) }
注意:如果沒有參數則 var obj: () -> Type,使用時不要傳入參數,但是括號不能省略,如view.setOnClickListener{ listener() }
3、lambda函數不執行
使用匿名函數時一定要有括號,沒有括號也不會報錯,但是這個函數不會執行,如
setListener(var item: Item, var listener: (Item) -> Unit){view.setOnClickListener{ listener }
}
并不會報錯,但是點擊后不執行函數,一定要帶上括號和參數,如view.setOnClickListener{ listener(item) }
?
總結
以上是生活随笔為你收集整理的kotlin学习笔记——lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin学习笔记——重载操作符
- 下一篇: kotlin学习笔记——内联函数