我正在寻找一种惯用的方法来返回如果不是null在Kotlin中的变量 . 例如,我想要一些如:
for (item in list) {
getNullableValue(item).? let {
return it
}
}
但是不可能在Kotlin的 let
区域内返回 .
有没有一个很好的方法来做到这一点,而不必这样做:
for (item in list) {
val nullableValue = getNullableValue(item)
if (nullableValue != null) {
return nullableValue
}
}
5 回答
可以从
let
返回,因为您可以在documentation中读取:let()
是一个inline
函数,因此只要在let
中执行return
,就会自动从封闭函数返回,如下例所示:要修改行为,可以使用“标签”:
不确定这是否会被称为惯用语,但你可以这样做:
编辑:
基于s1m0nw1的答案,您可以将其减少到:
这种“正确”的惯用方法是使用“第一”方法 .
例:
val x = listOf<Int?>(null, null, 3, null, 8).first { it != null }
他的具体例子是
return list.first {getNullableValue(it) != null}
我同意Ryba about using first,但这是使用
continue
的另一种选择:这遵循"early returns"的原则,通过elvis运算符,至少hinted at in the documentation,以及规则FoldInitializerAndIfToElvis中的linter建议 .
它可能是这样的:
我假设需要外部循环 . 如果不是这样,Ryba建议解决方案应该有效 .