1.Lambda介绍
Lambda表达式可以减少代码的复杂度,使代码看上去更加清爽,另外,Kotlin中有许多高阶函数,这些函数基本都是由Lambda表达式实现的,因此,学习Lambda表达式是十分有必要的。
Kotlin中的Lambda表达式本质上底层是匿名函数实现的。
2.Lambda语法
2.1 表达式特点
- Lambda总是被
{}
包裹; - 若有参数,则在
->
左侧; - 若有函数体,则在
->
右侧。
2.2 语法
2.2.1 无参数
语法:
// 语法
val/var 函数名 = {
//逻辑操作
}
示例:
// 普通
fun t1() {
println("我是普通表达式")
}
// 无参Lambda
var tt1() = {
println("我是无参Lambda表达式")
}
2.2.2 有参
语法:
// 语法1
val/var 函数名: (参数类型, 参数类型 ...) -> 返回值类型 = {
//逻辑操作
}
// 语法2
val/var 函数名 = {
变量名: 变量类型, 变量名:变量类型, ... -> 逻辑操作
}
示例:
// 普通
fun t2(a: Int, b: Int): Int {
return a + b
}
// Lambda表达式1
var tt2: (Int, Int) -> Int = {
a, b -> a + b
}
// Lambda表达式2
var ttt2 = {
a:Int, b: Int -> a + b
}
2.2.3 做为函数中的参数
语法:
// 语法
fun 函数名(变量名: 变量类型, ... , 函数名: (变量名: 变量类型 ...) -> 返回值): 返回值 {
//逻辑
}
示例:
// 普通
fun sum(a: Int, b: Int): Int {
return a + b;
}
fun t3(a: Int, b: Int): Int {
return a + b
}
t3(4, sum(5,6))
// Lambda表达式作为函数中的参数
fun tt3(a: Int, sum: (num: Int, num2: Int) -> Int): Int {
return a + sum.invoke(5,6);
}
tt3(4, {num: Int, num2: Int -> num + num2})
说明:
做为函数中的参数比较难理解,可以把它认为是将普通函数中的某一个参数变成一个函数,这个函数即是Lambda形式的函数,很多高阶函数即是通过此方法来实现的。
3.Lambda表达式使用
3.1 it
当lambda表达式函数中的参数只有1个的时候,可以用it
来代替。
fun tt4(a: Int, foo: (num: Int) -> Boolean ): Int {
if(foo(a)) {
return a
} else {
return 0
}
}
tt4(10, { it > 5}) // 输出10
tt4(3, { it > 5}) //输出0
等价于:
tt4(10, { num:Int -> num > 5 })
3.2 模拟为Android
的View
编写一个OnClickListener
模拟一个View
:
class View {
// listener实际上是一个 函数
var mListener: ((s: String) -> Unit)? = null
fun setOnClickListener( listener: ((s: String) -> Unit)?) {
this.mListener = listener
}
fun click(s: String) {
mListener?.invoke(s)
}
}
设置点击监听,并点击:
var v = View();
v.setOnClickListener { println("I want Say: $it") }
v.click("Hello Kotlin") // 输出:I want Say: Hello Kotlin
网友评论