kotlin学习笔记——lambda表达式
2019-05-19 本文已影响0人
崔兴旺
语法
lambda被大括号包含
{T,T->Boolean},代表的含义是两个T类型参数,返回值为Boolean
练习一:遍历数组并打印
fun main() {
//定义一个String类型的数组array
val array: Array<String> = arrayOf("a", "", "c")
println("==========lambda终极遍历方式==========")
array.forEach(::println)
println("==========普通遍历方式==========")
for (a in array) {
testPrint(a)
}
println("==========完整版的lambda写法==========")
array.forEach({ element -> testPrint(element) })
println("==========如果一个函数的最后一个参数是lambda表达式,则可以将该表达式写在括号后面==========")
array.forEach() { element -> testPrint(element) }
println("==========如果一个函数只有一个参数,且参数是lambda表达式,则小括号都可以省略==========")
array.forEach { element -> testPrint(element) }
println("==========如果lambda表达式参数只有一个,则参数名默认用it==========")
array.forEach { testPrint(it) }
println("==========如果函数与lambda表达式的`参数、返回值一致,则可以用双冒号写法()==========")
array.forEach(::testPrint)
}
/**
* 自定义的打印方法
*/
fun testPrint(str: String) {
println(str)
}
练习二:仿照view点击事件回调
1.声明一个View类
class View {
//定义一个lambda表达式变量
//第一种方式:使用lambda表达式作为成员变量
var mOnClickListener = { view: View -> Unit }
//第二种方式:使用函数作为成员变量
/*
var mOnClickListener = fun(view: View) {
}
*/
//为lambda赋值
fun setOnClickListener(onClick: (View) -> Unit) {
this.mOnClickListener = onClick
}
//在点击事件中触发回调
fun click() {
mOnClickListener(this)
}
}
2.在activity中设置view的监听事件,并点击view触发监听
fun main() {
val view = View()
//最完整的lambda写法
view.setOnClickListener({ view: View -> println("被点击了,view:$view") })
//去掉了小括号和View类型
view.setOnClickListener { view -> println("被点击了,view:$view") }
//当参数只有一个view时,用it代替view
view.setOnClickListener { println("被点击了,view:$it") }
//点击view,触发监听
view.click()
}