美文网首页
kotlin学习笔记——标准函数(with、let、run、ap

kotlin学习笔记——标准函数(with、let、run、ap

作者: 崔兴旺 | 来源:发表于2019-07-07 22:02 被阅读0次

    kotlin标准函数

    总结写在最前

    kotlin标准函数

    1.with:

    println("====================学习with====================")
    /**
     * 特点:
     * 1.传入参数为this,可以直接调用this的属性和函数
     * 2.返回值可以是任意类型
     * 缺点:
     * 1.不支持非null校验
     * 2.不支持链式调用
     */
    val userInfo = with(User("崔兴旺", 28)) {
        println("$name,$age")//可以直接调用属性
        println(getUserInfo())//可以直接调用函数
        this//将user对象自身返回,也可以返回其他任意类型
    }.getUserInfo()
    println(userInfo)
    /**
     * 打印输出
     * 崔兴旺,28
     * 姓名:崔兴旺,年龄:28
     * 姓名:崔兴旺,年龄:28
     */
    

    1.let

    println("====================学习let====================")
    /**
     * 特点:
     * 1.可以在表达式执行前进行非null校验
     * 2.传入参数为it,需要用it来调用属性和函数
     * 3.返回值可以是任意类型,且支持链式调用
     */
    findUser()?.let {
        println("${it.name},${it.age}")
        println(it.getUserInfo())
        it
    }?.let {
        println(it)
        it.name
    }?.let {
        println("姓名:$it")
        it.length
    }.let {
        println("姓名字数:$it")
    }
    /**
     * 打印输出
     * 崔兴旺,28
     * 姓名:崔兴旺,年龄:28
     * User(name=崔兴旺, age=28)
     * 姓名:崔兴旺
     * 姓名字数:3
     */
    

    3.run

    /**
     * 特点:★结合了let和with的优点★
     * 1.可以在表达式执行前进行非null校验
     * 3.传入参数为this,可以直接调用this的属性和函数
     * 3.返回值可以是任意类型,且支持链式调用
     */
    println("====================学习run====================")
    findUser()?.run {
        println("$name,$age")
        println(getUserInfo())
        this
    }?.run {
        println(this)
        name
    }?.run {
        println("姓名:$this")
        length
    }.run {
        println("姓名字数:$this")
    }
    /**
     * 打印输出
     * 崔兴旺,28
     * 姓名:崔兴旺,年龄:28
     * User(name=崔兴旺, age=28)
     * 姓名:崔兴旺
     * 姓名字数:3
     */
    

    4.apply

    /**
     * 特点:
     * 1.可以在表达式执行前进行非null校验
     * 2.传入参数为this
     * 3.返回值固定为this自身类型
     */
    println("====================学习apply====================")
    findUser()?.apply {
        println("$name,$age")
        println(getUserInfo())
    }?.apply {
        println(this)
        name//这里的name并不能作为apply表达式的返回值
    }?.apply {
        println("用户信息:$this")
        age//这里的age并不能作为apply表达式的返回值
    }.apply {
        println("用户信息:$this")
    }
    /**
     * 打印输出
     * 崔兴旺,28
     * 姓名:崔兴旺,年龄:28
     * User(name=崔兴旺, age=28)
     * 用户信息:User(name=崔兴旺, age=28)
     * 用户信息:User(name=崔兴旺, age=28)
     */
    

    5.also

    /**
     * 特点:
     * 1.可以在表达式执行前进行非null校验
     * 2.传入参数为it
     * 3.返回值固定为this自身类型
     */
    println("====================学习also====================")
    findUser()?.also {
        println("${it.name},${it.age}")
        println(it.getUserInfo())
    }?.also {
        println(it)
        it.name//这里的name并不能作为apply表达式的返回值
    }?.also {
        println("用户信息:$it")
        it.age//这里的age并不能作为apply表达式的返回值
    }.also {
        println("用户信息:$it")
    }
    /**
     * 打印输出
     * 崔兴旺,28
     * 姓名:崔兴旺,年龄:28
     * User(name=崔兴旺, age=28)
     * 用户信息:User(name=崔兴旺, age=28)
     * 用户信息:User(name=崔兴旺, age=28)
     */
    
    fun findUser(): User? {
        return User("崔兴旺", 28)
    }
    
    
    data class User(val name: String, val age: Int) {
        fun getUserInfo(): String {
            return "姓名:$name,年龄:$age"
        }
    }
    

    相关文章

      网友评论

          本文标题:kotlin学习笔记——标准函数(with、let、run、ap

          本文链接:https://www.haomeiwen.com/subject/dbaihctx.html