Kotlin学习系列——标准函数(with、let、run、apply、also)
程序员文章站
2022-05-29 13:39:53
...
kotlin标准函数
总结写在最前
1.with:
println("====================学习with====================")
/**
* 特点:
* 1.传入参数为this,可以直接调用this的属性和函数
* 2.返回值可以是任意类型
* 缺点:
* 1.不支持非null校验
* 2.不支持链式调用
*/
val userInfo = with(User("崔兴旺", 28)) {
println("$name,$age")//可以直接调用属性
println(getUserInfo())//可以直接调用函数
this//将user对象自身返回,也可以返回其他任意类型
}.getUserInfo()
println(userInfo)
/**
* 打印输出
* 崔兴旺,28
* 姓名:崔兴旺,年龄:28
* 姓名:崔兴旺,年龄:28
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
1.let
println("====================学习let====================")
/**
* 特点:
* 1.可以在表达式执行前进行非null校验
* 2.传入参数为it,需要用it来调用属性和函数
* 3.返回值可以是任意类型,且支持链式调用
*/
findUser()?.let {
println("${it.name},${it.age}")
println(it.getUserInfo())
it
}?.let {
println(it)
it.name
}?.let {
println("姓名:$it")
it.length
}.let {
println("姓名字数:$it")
}
/**
* 打印输出
* 崔兴旺,28
* 姓名:崔兴旺,年龄:28
* User(name=崔兴旺, age=28)
* 姓名:崔兴旺
* 姓名字数:3
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
3.run
/**
* 特点:★结合了let和with的优点★
* 1.可以在表达式执行前进行非null校验
* 3.传入参数为this,可以直接调用this的属性和函数
* 3.返回值可以是任意类型,且支持链式调用
*/
println("====================学习run====================")
findUser()?.run {
println("$name,$age")
println(getUserInfo())
this
}?.run {
println(this)
name
}?.run {
println("姓名:$this")
length
}.run {
println("姓名字数:$this")
}
/**
* 打印输出
* 崔兴旺,28
* 姓名:崔兴旺,年龄:28
* User(name=崔兴旺, age=28)
* 姓名:崔兴旺
* 姓名字数:3
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
4.apply
/**
* 特点:
* 1.可以在表达式执行前进行非null校验
* 2.传入参数为this
* 3.返回值固定为this自身类型
*/
println("====================学习apply====================")
findUser()?.apply {
println("$name,$age")
println(getUserInfo())
}?.apply {
println(this)
name//这里的name并不能作为apply表达式的返回值
}?.apply {
println("用户信息:$this")
age//这里的age并不能作为apply表达式的返回值
}.apply {
println("用户信息:$this")
}
/**
* 打印输出
* 崔兴旺,28
* 姓名:崔兴旺,年龄:28
* User(name=崔兴旺, age=28)
* 用户信息:User(name=崔兴旺, age=28)
* 用户信息:User(name=崔兴旺, age=28)
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
5.also
/**
* 特点:
* 1.可以在表达式执行前进行非null校验
* 2.传入参数为it
* 3.返回值固定为this自身类型
*/
println("====================学习also====================")
findUser()?.also {
println("${it.name},${it.age}")
println(it.getUserInfo())
}?.also {
println(it)
it.name//这里的name并不能作为apply表达式的返回值
}?.also {
println("用户信息:$it")
it.age//这里的age并不能作为apply表达式的返回值
}.also {
println("用户信息:$it")
}
/**
* 打印输出
* 崔兴旺,28
* 姓名:崔兴旺,年龄:28
* User(name=崔兴旺, age=28)
* 用户信息:User(name=崔兴旺, age=28)
* 用户信息:User(name=崔兴旺, age=28)
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
fun findUser(): User? {
return User("崔兴旺", 28)
}
data class User(val name: String, val age: Int) {
fun getUserInfo(): String {
return "姓名:$name,年龄:$age"
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10