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

how to make control flow based on nullable variable in Kotlin?

假设我有这个变量

   val number : Int? = 12

我想根据变量进行控制流,如果变量为空则执行某些操作,否则执行其他操作

在 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
}

那么如何解决这个问题?

?.表示只有左边不为空才会执行。 ?: 运算符仅在左侧不为空时才执行右侧。 你可能有这样的东西:

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

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

警告: 语义是您期望 return non-null 来自 let {...} 闭包的值以避免 `运行 {..} 关闭被执行。因此代码如下: number?.let { null } ?: run { 42 } === 42(不为空)