内置函数的总结:
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 "你的字符串不合格"
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐