kotlin if(bar == null)vs bar?:run
这里是示例
if (bar == null) { // do something }
与
bar ?: run { // do something. }
- 哪一个是最佳实践?
- 什么是变异财产?
- 第一个不和变异的财产工作?
哪一个是最佳实践?
正如Oliver所指出的那样,当使用if(bar == null)
时,意图是非常明确的。 这也是检查空条件下官方Kotlin文档中使用的方法。
虽然我不建议在这种情况下,Kotlin允许你做这样的整洁的事情:
inline fun whenNull(input: Any?, block: () -> Unit) { if(input == null) block() }
这将允许你重写if(bar == null)
如下:
whenNull(bar) { // Do something }
什么是变异财产?
这是一个值可以改变的variables。 基本上,variables声明使用var
而不是val
。
第一个不和变异的财产工作?
这与您的示例不相关,因为您正在检查if(bar == null)
。
如果你正在检查if(bar != null)
你所指的是相关的。 在这种情况下,如果bar
是一个var
,那么Kotlin就不能智能地将它转换为一个非nulltypes,因为在bar
的值可以随时改变的情况下。 这意味着if
你必须在bar
( ?.
)上打安全电话,或使用!!
。
您可以通过执行以下操作来解决此问题:
val b = bar if(b != null) { // b has been smart cast to a non-null type }
因为它是不可变的( val
),所以Kotlin能够聪明地将b
转换成非空types。
或者,你可以使用一个安全的调用,并let
调用指定的函数/块作为它的参数,并返回其结果。 给定安全的调用, this
当然是非空的。
bar?.let { // this is bar (non-null) }