Kotlin 安全运算符 ?. 与 let 函数 及 Elvis运算符 ?:

1. 安全运算符 ?. 与Elvis运算符 ?: 配合使用

   nimAccount = teacher?.nim()?.accid() ?: "jake"
   nimToken = teacher?.nim()?.token() ?: "test"

上述代码 等价于 如下代码 :

     if (teacher != null && teacher.nim() != null && teacher.nim()!!.accid() != null) {
           nimAccount = teacher.nim()!!.accid()
     } else {
           nimAccount = "jake"
     }

     if (teacher != null && teacher.nim() != null && teacher.nim()!!.token() != null) {
           nimToken = teacher.nim()!!.token()
     } else {
           nimToken = "test"
     }
安全运算符 ?.
s?.toUpdate()   <=两者等价=>   if (s!=null) s?.toUpdate() else null
Elvis运算符 ?: 请看这篇文章

两者结合,功能强大。

2. 安全运算符 ?.let函数 配合使用

   nimAccount?.let {
       registerMsgRevokeFilter(it)
       //      注册撤回观察者
       registerMsgRevokeObserver()
    }

上述代码等价于

      if (nimAccount!=null){
            registerMsgRevokeFilter(nimAccount!!)
            //      注册撤回观察者
            registerMsgRevokeObserver()
        }

你可能觉得使用 let函数 并没有方便多少,
但这两种方式都可以实现 将可空类型的参数传递给非空函数

let函数

功能:把一个调用它的对象变成lambda表达式,常结合安全运算符使用。
安全调用"let"只在表达式不为null时,执行lambda

使用let函数,可以使代码更优雅~

你可能感兴趣的:(Kotlin 安全运算符 ?. 与 let 函数 及 Elvis运算符 ?:)