最近使用kotlin重构项目,遇到了一个小问题!
在Java中,可能会遇到判断某个对象是否为空,为空执行一段逻辑,不为空执行另外一段逻辑。查了下很多博客好像都是只对不为空处理做讲解,没有同时把为空处理的方法写出来
Java 代码如下:
if (person!=null) {
num ++;
("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