最近在项目中看到这么一段代码
//Rxjava...
.onErrorReturn {
if (cache.count() > 0) cache
throw it
}
本意应该是在 Rx流 出错时,试图返回 cache
的内容;若 cache
也不存在则继续 throw
。
抛开本应在返回 cache 时要对之前 error 进行 Log 不提,上面这一段代码本身是不能正常工作的:在 if (cache.count() > 0) cache
这一句执行完后,throw it
必然执行。
分析原因, 一是 Kotlin 本身可以省略 return 不写,导致原本写法可能是这样的:
.onErrorReturn {
cache // == return cache
}
二是没有遵循好的代码规范,即永远不要省略 if {} else {}
中的括号,在修改 if
附近的代码时产生了不必要的问题。
另, 有人认为写在一行里的 if a else b
是可以省略括号的,个人其实也不太推荐。写时一时爽,debug & 维护起来就是另一回事了。