Kotlin之内置函数

在Kotlin中提供了我们方便使用的内置函数,本章主要了解以下

常用内置函数的使用

    • 1、函数特性概况
    • 2、apply 函数
    • 3、also 函数
    • 4、let函数
    • 5、run函数
    • 6、with函数
    • 7、takeIf
    • 8、takeUnless
    • 9、全部代码

1、函数特性概况

  1. apply:返回调用者本身,匿名函数持有this,方便链式调用
  2. also: 返回调用者本身,匿名函数持有it,方便链式调用
  3. let:返回匿名函数最后一行返回值,持有 it
  4. run:返回匿名函数最后一行返回值,持有 this
  5. with:返回匿名函数最后一行返回值,持有 this
  6. takeIf:当匿名函数返回true的时候,就返回调用者本身,否则就返回null
  7. takeUnless:当匿名函数返回false的时候,就返回调用者本身,否则就返回null

如果上面这些特性都很清楚,那基本可以不用往下看了

2、apply 函数

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

3、also 函数

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用法总结:

  • 相同点:返回值都是调用者本身,都是方便链式调用
  • 不同点:apply持有thisalso持有的是it

4、let函数

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

5、run函数

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用法总结:

  • 相同点:返回值都是匿名函数最后一行的返回值
  • 不同点:run持有thislet持有的是it

6、with函数

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用法总结:

  • 相同点:返回值都是匿名函数最后一行的返回值,匿名函数中都持有this
  • 不同点:调用方式不同

7、takeIf

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

8、takeUnless

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"

9、全部代码

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")

}

你可能感兴趣的:(Kotlin,kotlin,android,java)