Kotlin 使用空判断?.与?: 同时处理空与非空时逻辑

最近使用kotlin重构项目,遇到了一个小问题!

在Java中,可能会遇到判断某个对象是否为空,为空执行一段逻辑,不为空执行另外一段逻辑。查了下很多博客好像都是只对不为空处理做讲解,没有同时把为空处理的方法写出来

 

Java 代码如下:


if (person!=null) {
  num ++;
  System.out.println("have person");
  ...    
} else {
  num = 0;
}

使用kotlin 重构这段代码时,是有 ?.  以及 ?: 两个操作符可以简化空操作。

简单说下 ?. 是对象 不为 null 时执行代码,?: 是对象 为 null 执行代码  ; 具体这两个的详细介绍可以参考其他博客,这里直接省略了。

 

于是我试着使用kotlin 修改这段代码,原本以为可以这样写,发现会报错,  因为 ?: 不能跟赋值语句。

 person?.let { 
       println("have person")
       ...
       num++
 } ?: num =0    // 报错!! ?:后不能直接使用赋值语句

这里可以使用 ?: let {  } 写法

 person?.let { 
       //不为空执行
       println("have person")
       ...
       num++
 } ?: let {
       //为空时执行
       num = 0
 }

 若目的仅仅只是在最后结果改变某个变量的值,可以例用let在最后会返回结果的特性,上面还可以继续修改为如下:

num = person?.let {
            println("have person")
            ...
            num++
        } ?: 0

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值