参考文献——kotlin之Lambda编程
来自简书作者——程自舟
Kotlin lambda语法
1 2 3 4 5 6 7 8 9 10 11 12 13
| btn.setOnClickListener ((View v) -> { toast("click") }) btn.setOnclickListener { toast("click") } btn.setOnLongClickListener { toast("Long Click") true } {a:Int, b:String -> String (a + b.toDouble()).toString() }
|
完整写法
1 2 3 4 5 6 7 8 9
| {a:Int, b:String, c:Long -> String var temp:Double = a + b.toDouble() if (c == 0L) { "error" } else { (temp.toDouble() + c).toString() } }
|
省略参数的写法
lambda的使用
- 作为高阶函数的参数,比如setOnclickListener,List的sort系列函数
- 调用run方法
- Lambda表达式也可以传递给一个高阶函数当做参数,因此上述代码中
1
| view.setOnClickListener({v -> viewClicked(v) })
|
- 在 Kotlin 中有一个约定,如果函数的最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应的参数,你可以在圆括号之外指定它
因此可以实现如下
1
| view.setOnClickListener() {v -> viewClicked(v) }
|
- 在 Kotlin中还有另外一个约定,如果一个函数的参数只有一个,并且参数也是一个函数,那么可以省略圆括号
1
| view.setOnClickListener{v -> viewClicked(v) }
|
- 使用默认参数名称(注意)
- 默认名称it只会在实参名称没有显示的指定时候才会生成。it能大大缩短简化代码,但是不应该滥用,尤其是在lambda嵌套情况下,最好显示声明lambda参数。否则很难搞清it引用的到底是哪个值,本末倒置。