内置函数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() } ?: "未经过初始化")
- }