如何在Kotlin中检查Double值是否为null或零

8

如何在Kotlin中检查Double值是否为Null或零

val ratio:Double? = 0.0

val calRatio = if (ratio == null || ratio == 0.0)
        0.12
    else
        ratio

空比率、0.0和0.1的比率

如果比率为空或为0.0,则返回0.12

如果比率为0.2或更高,则返回相同的比率值

如何检查此算法而不使用if语句


3
为什么你不想使用if语句? - zsmb13
即使出于某种原因您不想特别使用 if 语句,这仍然是 if 表达式,而不是 if 语句。 - Alexey Romanov
1个回答

15

你可以使用takeUnless在符合Kotlin语言习惯的情况下编写代码,而无需使用if语句。

val ratio: Double? = 0.0
val calRatio = ratio.takeUnless { it == 0.0 } ?: 0.12

takeUnless函数检查数字是否与谓词it == 0.0匹配。如果谓词计算结果为true,则返回null。只有在谓词计算结果为false时才返回实际的数字。

我们可以通过考虑三种可能情况来理解此方法:

  1. rationull时,谓词it == 0.0的值为false。调用ratio.takeUnless { it == 0.0 }将返回ratio的值,即null。因为其左侧运算数是null,所以?:运算符返回右侧的值0.12
  2. ratio0.0时,谓词it == 0.0的值为true。调用ratio.takeUnless { it == 0.0 }将忽略ratio的值而返回null。因为其左侧运算数是null,所以?:运算符返回右侧的值0.12
  3. ratio为任何非空,非零数字时,谓词it == 0.0的值为false。调用ratio.takeUnless { it == 0.0 }将返回ratio的值,即原始数字。因为其左侧运算数不是null,所以?:运算符返回左侧的值。

2
我更喜欢使用takeIf而不是takeUnless来提高可读性。在阅读代码时,我认为看到肯定的语句要容易得多。在我看来,ratio.takeIf { it != 0.0 } ?: 0.12比ratio.takeUnless { it == 0.0 } ?: 0.12更容易理解。 - Pau Guillamon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接