如何在 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
(不为空)
假设我有这个变量
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
(不为空)