gpt4 book ai didi

android - Kotlin:为什么要从 'return' 中提取 'if'? (Android工作室推荐)

转载 作者:行者123 更新时间:2023-11-29 14:34:36 25 4
gpt4 key购买 nike

以下代码(简化示例):

/** Determine if a is less than 15 and b is more than 15. **/
fun isFifteenBetween(val a: Int, val b: Int) {
if((a < 15) && (b > 15)) { return(true) }
else { return(false) }
}

应该使 isFifteenBetween(3, 20) 返回 true,并且 isFifteenBetween(20, 3) 返回 false。但是,我从 Android studio (v3.4) 得到以下建议:

Return should be lifted out of 'if'
Inspection info: This inspection reports if, when and try statements
that can be converted to expressions by lifting a return or an assignment out.
Typical example:

fun foo(arg: Boolean): String {
when (arg) {
true -> return "Truth"
false -> return "Falsehood"
}
}

我在 stackoverflow 上发现的唯一相关问题是 Kotlin: Return can be lifted out of 'when' ,但我认为这似乎并不能完全涵盖我的情况。

  1. 我的代码应该如何编写?我不明白 Android Studio 提供的“何时”表达式应该如何适合我的情况。
  2. Android studio 的推荐仅仅是品味和舒适度的问题,还是在这种情况下更改代码实际上会对性能产生影响?
  3. 是否有可用于最佳实践的指南?

最佳答案

官方惯例是更喜欢返回表达式本身: https://kotlinlang.org/docs/reference/coding-conventions.html#using-conditional-statements

这表示来自 android studio 的例子应该变成:

return when (arg) {
true -> "Truth"
false -> "Falsehood"
}

这会将 isFifteenBetween 的代码更改为:

/** Determine if a is less than 15 and b is more than 15. **/
fun isFifteenBetween(val a: Int, val b: Int) {
return if((a < 15) && (b > 15)) true
else false
}

就性能而言,这两种选择几乎相当。


这些答案可能会受到我的一些影响。但我认为或多或少是背后的原因。返回表达式的事实在阅读这段代码时会产生直接影响。您知道声明的结果将是详尽无遗的,并且您知道每个分支都已处理。

我认为这是最佳实践,因为在某些情况下,使分支条件详尽无遗可能会使编译器在忘记一些新条件的同时给您一个错误。尤其是密封类。进一步阅读:https://proandroiddev.com/til-when-is-when-exhaustive-31d69f630a8b

关于android - Kotlin:为什么要从 'return' 中提取 'if'? (Android工作室推荐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55795166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com