内置函数的总结:
let:
1.let函数返回类型,是根据匿名函数最后一行的变化而变化
2.let函数的匿名函数里持有的是it == 集合本身
apply:
1.apply函数返回以及返回类型,一直都是info,如果是aaa,则需要时aaa.length()
2.apply函数的 匿名函数里持有的是this == info本身run:
1.run函数返回类型,是根据匿名函数最后一行的变化而变化 (此条==let)
2.run函数的匿名函数里持有的this == str本身 (此条和apply一样)
一、Kotlin语言的apply内置函数
fun main() {
val info = "Derry you hao"
//普通的方式
println("info字符串的长度是:${info.length}")
println("info最后一个字符是:${info[info.length - 1]}")
println("info全部转成小写是:${info.toLowerCase()}")
//apply内置函数方式
//apply特点:apply始终返回info本身
val infoNew : String = info.apply{
//一般大部分情况下,匿名函数都会只有一个it
//但是apply函数不会持有it,却会持有当前this == info本身
println(this)
//this可以省略
println("info字符串的长度是:${length}")
println("info最后一个字符是:${this[length - 1]}")
println("info全部转成小写是:${toLowerCase()}")
}
println("apply返回的值:$infoNew")
//真正使用apply函数的写法规则如下:
//info.apply特点:apply函数始终是返回"info本身",所以可以链式调用
info.apply {
println("info字符串的长度是:$length")
}.apply {
println("info最后一个字符是:${this[length - 1]}")
}.apply {
println("info全部转成小写是:${toLowerCase()}")
}
//普通写法
val file = File("D:\\a.txt")
println(file.readLines())
//apply写法
//匿名函数里面,持有的this == file本身
file.apply {
println(readLines())
}
}
二、Kotlin语言的let内置函数
//普通方式 对集合第一个元素相加
//let方式 对集合第一个元素相加
fun main() {
//普通方式 对集合第一个元素相加
val list = listOf(6,5,2,3,5,7)
val value1 = list.frist() //第一个元素获取
val result1 = value1 + value1
println(result1) //12
//let方式 对集合第一个元素相加
//let函数返回类型,是根据匿名函数最后一行的变化而变化
//let函数的匿名函数里面持有的是it == 集合本身
val result2 = listOf(6,5,2,3,5,7).let {
//it == list集合
//匿名函数的最后一行作为返回值,let函数的特点,而apply永远返回info本身
it.frist() + it.frist()
}
println(result2) //12
}
//普通方式 对值判null,并返回
//let方式 对值判null,并返回
fun main() {
println(getMethod1("Derry"))
println(getMethod3("Derry"))
}
//普通方式
fun getMethod1(value: String?) : String {
return if (value == null) "你传递是null" else "欢迎${value}"
}
//普通方式的简化版本
fun getMethod2(value: String?) : String = if (value == null) "你传递是null" else "欢迎${value}"
//let方式 + 空合并操作符
fun getMethod3(value : String?) {
return value?.let {
"欢迎${it}"
} ?: "你传递是null"
}
三、内置函数run
fun main() {
val str = "Derry is OK"
val r1 = str.run {
//run函数返回类型是根据最后一行的变化而变化
//run函数的匿名函数里持有的是this = str 本身 此条和apply一模一样
true
}
println(r1)
//下面是 具名函数 配合 run函数
//2.具名函数判断长度 isLong
//这个是数据匿名函数配合run
str.run {
}
//这个是属于具名函数:这里由于println是系统的具名函数,所以可以直接用
str.run(::isLong).run(::showText).run(::println) //你的字符串合格
//上面全部是具名函数调用run执行,下面是匿名函数调用run执行
str.run {
if (length > 5) true else false
}
.run {
if (this) "你的字符串合格" else "你的字符串不合格"
}
}
fun isLong(str: String) = if (str.length > 5) true else flase
fun showText(isLong: Boolean) = if (isLong) "你的字符串合格" else "你的字符串不合格"