是否有可能在Kotlin的“ if”条件内声明变量?

问题描述 投票:0回答:3

我有这行代码:

if (x * y * z > maxProduct) maxProduct = x * y * z

但是我的问题是,当我想像这样使用它时,我必须写两次x * y * z。我知道我可以在if语句之前创建一个变量,如下所示:

val product = x * y * z
if (product > maxProduct) maxProduct = product

但是我不喜欢这样,我必须创建一个仅用于此表达式的临时变量。有没有办法改善我的代码?

if-statement variables kotlin optimization
3个回答
3
投票

您的要求没有很好的改善。但是,如果您想要一些功能性样式代码而不创建新变量,请使用以下代码:

(x * y * z).takeIf { it > maxProduct }?.let { maxProduct = it }

可读性较差,所以我建议使用其他变量。


1
投票

您可以稍微改变比较逻辑,并且应该使用kotlin语法实现所需的行为:

when(val product = x*y*z.compareTo(maxProduct)){
    1 -> maxProduct = product
}

根据有关compareTo()功能的文档:

将此值与订单的指定值进行比较。如果此值等于指定的其他值,则返回零;如果小于其他值,则返回负数;如果大于其他值,则返回正数。


0
投票
maxProduct = maxProduct.coerceAtLeast(x * y * z)

maxProduct = max(maxProduct, x * y * z)

[通常(对于没有快捷功能的表达式),.let()可用于避免使用单独的变量。但是,当您将其压缩到一行时,我认为它不那么容易阅读:

(x * y * z).let { if (it > maxProduct) maxProduct = it }
© www.soinside.com 2019 - 2024. All rights reserved.