文章目录
- 一、空合并操作符 ?:
- 二、空合并操作符与 let 函数结合使用
一、空合并操作符 ?:
空合并操作符 ?: 用法 :
表达式 A ?: 表达式 B
如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ;
如果 表达式 A 的值 为 null , 则 整个表达式的值 就是 表达式 B 的值 ;
代码示例 : 在下面的代码中 ,
name 变量 被声明为 String? 可空类型的变量 , 为其赋值为 null ,
使用 name ?: "name 变量为空" 代码 , 其效果如下 :
空合并操作符 左侧的 name 表达式如果为 null , 则 取 右边的 表达式 作为该表达式最终的值 ,
如果 左侧的 name 表达式 不为 null , 则 取 该 name 变量作为 该表达式最终的值 ;
因此 , 第一次使用 name ?: "name 变量为空" 代码时 , name 为空 , 整个表达式 name ?: "name 变量为空" 返回的是 "name 变量为空" 值 , 打印出来的就是 name 变量为空 内容 ;
之后 为 name 变量赋值 "Tom" 字符串值 , 现在 name 变量不为空 , 使用 name ?: "name 变量为空" 代码返回的是 name 变量的值 , 因此打印出来的就是 Tom 内容 ;
fun main() {
var name: String? = null
println(name ?: "name 变量为空")
name = "Tom"
println(name ?: "name 变量为空")
}执行结果 :
name 变量为空
Tom

二、空合并操作符与 let 函数结合使用
空合并操作符 ?: 与 let 函数 结合使用 , 可以 替代 if .. else .. 语句 ;
代码示例 :
fun main() {
var name: String? = null
name = "tom"
name = name?.let {
it.capitalize()
} ?: "Jerry"
println(name)
}执行结果 :
Tom

如果 name 变量为 null , 则 ?: 表达式中 , 会选择 ?: 后面的表达式作为最终结果 ;
对应代码如下 :
fun main() {
var name: String? = null
name = name?.let {
it.capitalize()
} ?: "Jerry"
println(name)
}执行结果 :
Jerry











