内置函数2总结:
with:
with(str):with和run基本一样,只不过就是使用的时候不同
1.with函数返回类型,是根据匿名函数最后一行的变化而变化
2.with函数的匿名函数里面持有的是this==str本身
also:
str.also
1.also函数返回类型,用于都是str本身
2.also函数的 匿名函数里面呢持有的是it == str本身
takeIf:
name.takeIf
//一般大部分情况下,都是takeIf + 空合并操作符一起使用
//作用:如果结果为true,返回调用者name本身,否则返回null,结合空合并,如果为null,处理?:后的
takeUnless:
takeIf和takeUnless功能是相反的
name.takeIf {true/false} :true返回name本身,false返回null
name.takeUnless {true/false}:false返回name本身,true返回null
一、Kotlin语言的with函数
fun main() {
val str = "nihao"
//匿名操作
with(with(str) {
//this == str 本身
length
}){
println("你的字符串长度为:$this")
}
//具名操作
with(with(str,::getStrLen),::println) //输出nihao的长度
}
fun getStrLen(str: String) = str.length
二、Kotlin语言的also内置函数
fun main() {
val str = "ABCDEFG"
val r1 : String = str.also {
true
'C'
}
val r2 : Int = 123.also {
true
'C'
}
str.also {
//it == str 本身
println(it)
}
//真正使用also函数的写法规则如下:
//str.also特点,also函数始终是返回“str本身”,所以可以链式调用
str.also {
println("str的原始数据是:$it")
}.also {
println("str转换大写的效果是:${it.toLowerCase()}")
}
}
三、Kotlin语言的takeIf内置函数
//一般大部分情况下,都是takeIf + 空合并操作符一起使用
//作用:如果结果为true,返回调用者name本身,否则返回null,结合空合并,如果为null,处理?:后的
fun main() {
val result = checkPermissionAction("Derry","123")
println(if (result != null) "欢迎${result}" else "没有权限")
//println(checkPermissionAction2("Root","1"))
}
//前端
public fun checkPermissionAction(name: String,pwd: String) : String? {
return name.takeIf { permissionSystem(name,pwd) }
//name.takeIf函数,如果函数里是true,则返回name,否则,则返回null
}
//takeIf + 空合并操作符
public fun checkPermissionAction2(name: String,pwd: String) : String {
return name.takeIf { permissionSystem(name,pwd) } ?: "你的权限不够"
//name.takeIf函数,如果函数里是true,则返回name,否则,则返回null
}
//权限系统
private fun permissionSystem(username: String,userpwd: String) : Boolean {
return if (uername == "root" && userpwd == "123") true else false
}
四、Kotlin语言的takeUnless内置函数
//takeUnless函数,true,返回null,false,返回调用者
class Manager {
private var infoValue: String? = null
fun getInfoValue()
fun setInfoValue(infoValue: String) {
this.infoValue = infoValue
}
}
fun main() {
val manager = Manager()
"Derry".takeIf //it == Derry
"Derry".takeUnless // it == Derry
//验证字符是否有初始化,这里为空则是true,takeUnless为true,则返回null,为null,则之后?:后的
//isNullOrBlank()判断是否为空
println( manager.getInfoValue().takeUnless { it.isNullOrBlank() } ?: "未经过初始化")
}