我有这行代码:
if (x * y * z > maxProduct) maxProduct = x * y * z
我的问题是每次使用
x * y * z
时都需要重复两遍。我知道我可以在 if
语句之前创建一个变量,像这样:val product = x * y * z
if (product > maxProduct) maxProduct = product
但我不喜欢必须创建一个仅用于此表达式的临时变量。有什么方法可以改进我的代码吗?
我有这行代码:
if (x * y * z > maxProduct) maxProduct = x * y * z
x * y * z
时都需要重复两遍。我知道我可以在 if
语句之前创建一个变量,像这样:val product = x * y * z
if (product > maxProduct) maxProduct = product
但我不喜欢必须创建一个仅用于此表达式的临时变量。有什么方法可以改进我的代码吗?
maxProduct = maxProduct.coerceAtLeast(x * y * z)
或者
maxProduct = max(maxProduct, x * y * z)
.let()
可用于避免使用单独的变量。但是,当你将它挤压在一行上时,在我看来阅读起来不是很容易:(x * y * z).let { if (it > maxProduct) maxProduct = it }
对于您的需求,目前没有什么较好的改进方案。但是,如果您想要一些功能性的代码,而不需要创建新变量,则可以使用类似以下示例的代码:
(x * y * z).takeIf { it > maxProduct }?.let { maxProduct = it }
它不够易读,因此我建议使用额外的变量。
when(val)
来完成,但最终结果可能不会更好。我会建议你直接创建val
。 - EpicPandaForce(x * y * z).let { ... }
或(x * y * z).run { ... }
(with(x * y * z) { ... }
)。对于您特定的代码片段,您可以直接使用maxProduct = max(maxProduct, x * y * z)
。 - user28434'mstepmaxProduct = max(maxProduct, x* y *z)
是最简单的。 - sidgate