美文网首页
Kotlin-判空辅助工具(标准函数let)

Kotlin-判空辅助工具(标准函数let)

作者: 陈饥饿 | 来源:发表于2022-03-10 14:19 被阅读0次

    1、?.操作符:当对象不为空时正常调用相应的方法,当对象为空时则什么都不做。

    if(a != null){

        a.doSomething()

    }

    可以使用?.操作符简化

    a?.doSomething()

    优化doStudy()函数

    fun doStudy(study: Study?){

        study?.readBooks()

        study?.doHomework()

    }

    2、?:操作符:操作符左右两边都接收一个表达式,如果左边表达式的结果不为空就返回左边表达式的结果,否则就返回右边表达式的结果。

    val c = if(a != null){

        a

    } else {

        b

    }

     使用?:操作符简化

    val c = a ?: b

    3、编写一个函数用来获得一段文本的长度

    fun getTextLength(text: String?): Int{

        if(text != null){

            return text.length

        }

        return 0

    }

    用?.和?: 简化之后

    fun getTextLength(text: String?) = text?.length ?: 0//首先由于text是可能为空的,因此在调用它的length字段时需要使用?.操作符,而当text为空时,text?.length会返回一个null值,这个时候再借助?:操作符让它返回0

    4、如果想要强行通过编译,可以使用非空断言工具,写法是在对象的后面加上!!

    var content: String? = "hello"

    fun main(){

        if(content != null){//从逻辑上已经将空指针异常处理了,但是编译器并不知道,还是编译失败

            printUpperCase()

        }

        fun printUpperCase(){//函数并不知道外部已经对content变量进行了非空检查,在调用toUpperCase()方法时,还认为这里存在空指针风险,从而无法编译通过

            val upperCase = content.toUpperCase()

            println(upperCase)

        }

    }

    fun printUpperCase(){

        val upperCase = content!!.toUpperCase()//这是一种有风险的写法

        println(upperCase)

    }

    5、let:let既不是操作符,也不是关键字,而是一个函数,这个函数提供了函数式API的编程接口,并将原始调用对象作为参数传递到Lambda表达式中。

    obj.let{ obj2 -> 

        //编写具体的业务逻辑

    }//这里调用了obj对象的let函数,然后Lambda表达式中的代码就会立即执行,并且这个obj对象本身还会作为参数传递到Lambda表达式中,为了防止重名,将参数改为了obj2,但是实际上它们是同一个对象

    用let简化doStudy()函数:

    fun doStudy(study: Study?){

        study?.let { stu -> 

            stu.readBooks()

            stu.doHomework()

        }

    }

    当Lambda表达式的参数列表中只有一个参数时,可以不用声明参数名,直接使用it关键字来代替即可:

    fun doStudy(study: Study?){

        study?.let{

            it.readBooks()

            it.doHomework()

        }

    }

    6、let函数是可以处理全局变量的判空问题,而if判断语句则无法做到。因为全局变量的值随时有可能被其他线程修改,即使做了判空处理,仍然无法保证if语句的study变量没有空指针风险。

    相关文章

      网友评论

          本文标题:Kotlin-判空辅助工具(标准函数let)

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