在Kotlin中提供了我们方便使用的内置函数,本章主要了解以下
如果上面这些特性都很清楚,那基本可以不用往下看了
apply函数的特点:返回调用者本身,匿名函数持有this,方便链式调用
val info = "Kotlin Hello World"
//正确使用apply函数的写法
//apply特点:apply函数始终是返回 调用者本身,所以可以链式调用
info.apply {
//匿名函数中持有this,this可以省略不写
println("字符串长度是:${length}")
}.apply {
println("最后一个字符是:${this[length - 1]}")
}.apply {
println("全部转成大写是:${uppercase()}")
}
输出:
字符串长度是:18
最后一个字符是:d
全部转成大写是:KOTLIN HELLO WORLD
also函数特点:返回调用者本身,匿名函数持有it,方便链式调用
//正确使用also函数的写法
//also特点:also函数始终是返回 调用者本身,所以可以链式调用
info.also {
//匿名函数中持有it
println("字符串长度是:${it.length}")
}.also {
println("最后一个字符是:${it[it.length - 1]}")
}.also {
println("全部转成小写是:${it.lowercase()}")
}
输出:
字符串长度是:18
最后一个字符是:d
全部转成小写是:kotlin hello world
apply、also用法总结:
Let函数特点:返回匿名函数最后一行返回值,持有 it
//正确使用let函数的写法
//let特点:let函数返回匿名最后一行返回值,内部持有it
val letReturn = info.let {
println("it当前内容是:$it")
456.5f
"Hello"
false
it.length//最后一行返回长度Int
}
println("最终返回结果1=$letReturn")
val letReturn2 = letReturn.let {
println("it当前内容是:$it")
"当前字符串长度是${it + 88}"//最后一行返回String
}
println("最终返回结果2=$letReturn2")
输出:
it当前内容是:Kotlin Hello World
最终返回结果1=18
it当前内容是:18
最终返回结果2=当前字符串长度是106
run函数特点:返回匿名函数最后一行返回值,持有 this
//正确使用run函数的写法
//run特点:run函数返回匿名最后一行返回值,内部持有this
val runReturn = info.run {
println("当前内容是:$this")
456.5f
"Hello"
false
length//最后一行返回长度Int,this可以省略
}
println("最终返回结果1=$runReturn")
val runReturn2 = runReturn.run {
println("当前内容是:$this")
"当前字符串长度是${this + 88}"//最后一行返回String
}
println("最终返回结果2=$runReturn2")
输出:
当前内容是:Kotlin Hello World
最终返回结果1=18
当前内容是:18
最终返回结果2=当前字符串长度是106
let、run用法总结:
with函数特点:返回匿名函数最后一行返回值,持有 this
//正确使用with函数的写法
//with特点:with函数返回匿名最后一行返回值,内部持有this
val withReturn = with(info) {
println("当前内容是:$this")
456.5f
"Hello"
false
length//最后一行返回长度Int,this可以省略
}
println("最终返回结果1=$withReturn")
val withReturn2 = with(withReturn) {
println("当前内容是:$this")
"当前字符串长度是${this + 88}"//最后一行返回String
}
println("最终返回结果2=$withReturn2")
输出:
当前内容是:Kotlin Hello World
最终返回结果1=18
当前内容是:18
最终返回结果2=当前字符串长度是106
with、run用法总结:
takeIf函数特点:当匿名函数返回true的时候,就返回调用者本身,否则就返回null
info.takeIf { false }
info.takeIf { true }
println("takeIf false=${info.takeIf { false }}")
println("takeIf true=${info.takeIf { true }}")
输出:
takeIf false=null
takeIf true=Kotlin Hello World
takeUnless函数特点:当匿名函数返回false的时候,就返回调用者本身,否则就返回null
info.takeUnless { false }
info.takeUnless { true }
println("takeUnless false=${info.takeUnless { false }}")
println("takeUnless true=${info.takeUnless { true }}")
输出:
takeUnless false=Kotlin Hello World
takeUnless true=null
takeIf、takeUnless用法总结:
两个函数用法一样,功能正好相反
takeIf、takeUnless一般不单独使用,都是配合空合并符一起使用,如下:
info.takeIf { false }?:"当前信息是null"
fun main() {
val info = "Kotlin Hello World"
//正确使用apply函数的写法
//apply特点:apply函数始终是返回 调用者本身,所以可以链式调用
info.apply {
//匿名函数中持有this,this可以省略不写
println("字符串长度是:${length}")
}.apply {
println("最后一个字符是:${this[length - 1]}")
}.apply {
println("全部转成大写是:${uppercase()}")
}
println()
//正确使用also函数的写法
//also特点:also函数始终是返回 调用者本身,所以可以链式调用
info.also {
//匿名函数中持有it
println("字符串长度是:${it.length}")
}.also {
println("最后一个字符是:${it[it.length - 1]}")
}.also {
println("全部转成小写是:${it.lowercase()}")
}
println()
//正确使用let函数的写法
//let特点:let函数返回匿名最后一行返回值,内部持有it
val letReturn = info.let {
println("it当前内容是:$it")
456.5f
"Hello"
false
it.length//最后一行返回长度Int
}
println("最终返回结果1=$letReturn")
val letReturn2 = letReturn.let {
println("it当前内容是:$it")
"当前字符串长度是${it + 88}"//最后一行返回String
}
println("最终返回结果2=$letReturn2")
println()
//正确使用run函数的写法
//run特点:run函数返回匿名最后一行返回值,内部持有this
val runReturn = info.run {
println("当前内容是:$this")
456.5f
"Hello"
false
length//最后一行返回长度Int,this可以省略
}
println("最终返回结果1=$runReturn")
val runReturn2 = runReturn.run {
println("当前内容是:$this")
"当前字符串长度是${this + 88}"//最后一行返回String
}
println("最终返回结果2=$runReturn2")
println()
//正确使用with函数的写法
//with特点:with函数返回匿名最后一行返回值,内部持有this
val withReturn = with(info) {
println("当前内容是:$this")
456.5f
"Hello"
false
length//最后一行返回长度Int,this可以省略
}
println("最终返回结果1=$withReturn")
val withReturn2 = with(withReturn) {
println("当前内容是:$this")
"当前字符串长度是${this + 88}"//最后一行返回String
}
println("最终返回结果2=$withReturn2")
println()
info.takeIf { false }
info.takeIf { true }
println("takeIf false=${info.takeIf { false }}")
println("takeIf true=${info.takeIf { true }}")
println()
info.takeUnless { false }
info.takeUnless { true }
println("takeUnless false=${info.takeUnless { false }}")
println("takeUnless true=${info.takeUnless { true }}")
println()
info.takeIf { false }?:"当前信息是null"
println(info.takeIf { false } ?: "当前信息是null")
}