如何在Kotlin中基于可为空的变量进行控制流?

时间:2019-01-24 11:22:26

标签: kotlin nullable

让我说这个变量

   val number : Int? = 12

我想基于变量创建控制流,如果变量为null,则执行某些操作,否则执行其他操作

在Swift中,我可以做这样的事情:

if let number = number {
    print(number)
} else {
    // do something else
}

我实际上可以这样做

if number != null {
   print(number!!) // I want to avoid exclamation mark like this
} else {
   // do something else
}

但是我想避免使用感叹号,例如print(number!!)

我以前虽然可以做类似的事情

number?.let {

print(it)

} else {
  // else block is not available in let in Kotlin
}

那么如何解决呢?

1 个答案:

答案 0 :(得分:0)

?.表示仅当左侧不为null时才会执行。 ?:运算符仅在左侧不为空时执行右侧。 您可能会有类似的内容:

theExpression().toCompute().theNumber?.let { number ->
  print("This is my number $number
} ?: run {
  print("There is no number")
}

在这里,我们将T.let子句使用then扩展函数,并将run{ }子句使用else(扩展)函数。

警告:语义是,您希望从non-null闭包返回let {...}值,以避免执行`run {..}闭包。因此,代码如下: number?.let { null } ?: run { 42 } === 42(而不是null)