【问题标题】:How to Check Double value is Null or Zero in kotlin如何在 kotlin 中检查 Double 值是 Null 还是零
【发布时间】:2019-03-02 06:17:57
【问题描述】:

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

val ratio:Double? = 0.0

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

比例为 null , 0.0 , 0.1

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

并且比率为 0.2 或更大,则返回相同的比率值

如何检查这个算法不使用if语句

【问题讨论】:

  • 为什么不想使用 if 语句?
  • 即使您出于某种原因不想特别使用 if 语句,这也是 if 表达式,而不是 if 语句。

标签: if-statement kotlin double


【解决方案1】:

您可以在没有 if 语句的情况下使用 takeUnless 在 idomatic Kotlin 中编写此代码。

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 的值,即原始数字。由于其左侧操作数不为空,?: 运算符返回左侧值。

【讨论】:

  • 为了提高可读性,我倾向于使用 takeIf 而不是 takeUnless。在阅读代码时,我相信更容易看到积极的陈述。在我看来 ratio.takeIf { it != 0.0 } ?: 0.12 比 ratio.takeUnless { it == 0.0 } ?: 0.12 更容易理解
猜你喜欢
  • 2011-06-30
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2021-04-19
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
相关资源
最近更新 更多