应该使用带有主题的 kotlin
kotlin when with subject should be used
我对科特林的 when
声明很感兴趣。它看起来几乎和 lisp cond
一样强大,但又不完全一样。在 kotlin 网站 here 上的一个示例中,您可以看到没有主题。你只是列出布尔表达式,第一个成功的被计算,就像 lisp 的 cond
.
when {
handler == null -> print("null")
else -> print("handler is valid")
}
但这会生成一个编译器警告,提示 何时应使用 'with' 主题 。如何在不生成编译器警告的情况下使用此构造?
对于这些情况,最好使用 'with' 主题(您可以在 when 中传递的参数)。所以 warning-free 代码将是
when (handler) {
null -> print("null")
else -> print("handler is valid")
}
一般情况下如果有两种情况,最好用if。但是想想更多的情况。如果您必须在其他条件下使用处理程序,将处理程序作为主题传递将使您的代码更清晰。 (不确定是否对此有任何性能影响,应该不会)
我想我明白了。
编译器很聪明,很聪明。它识别出我的 when
只使用了一个变量,handler。警告告诉我变量应该用作 when
的主题,如本例所示:
when (handler) {
it == null -> print("null")
else -> print("handler is valid")
}
但如果我使用多个变量,警告就会消失。编译器似乎认识到主题没有意义。这是一个例子:
when {
firstHandler == null -> print("first handler is null")
secondHandler == null -> print("second handler is null")
else -> print("handlers are both valid")
}
没有警告,因为没有单一主题。
我对科特林的 when
声明很感兴趣。它看起来几乎和 lisp cond
一样强大,但又不完全一样。在 kotlin 网站 here 上的一个示例中,您可以看到没有主题。你只是列出布尔表达式,第一个成功的被计算,就像 lisp 的 cond
.
when {
handler == null -> print("null")
else -> print("handler is valid")
}
但这会生成一个编译器警告,提示 何时应使用 'with' 主题 。如何在不生成编译器警告的情况下使用此构造?
对于这些情况,最好使用 'with' 主题(您可以在 when 中传递的参数)。所以 warning-free 代码将是
when (handler) {
null -> print("null")
else -> print("handler is valid")
}
一般情况下如果有两种情况,最好用if。但是想想更多的情况。如果您必须在其他条件下使用处理程序,将处理程序作为主题传递将使您的代码更清晰。 (不确定是否对此有任何性能影响,应该不会)
我想我明白了。
编译器很聪明,很聪明。它识别出我的 when
只使用了一个变量,handler。警告告诉我变量应该用作 when
的主题,如本例所示:
when (handler) {
it == null -> print("null")
else -> print("handler is valid")
}
但如果我使用多个变量,警告就会消失。编译器似乎认识到主题没有意义。这是一个例子:
when {
firstHandler == null -> print("first handler is null")
secondHandler == null -> print("second handler is null")
else -> print("handlers are both valid")
}
没有警告,因为没有单一主题。