【问题标题】:Boolean expression with nullable variables具有可为空变量的布尔表达式
【发布时间】:2020-09-02 22:56:48
【问题描述】:

我正在对 Kotlin 进行修补,并试图了解可空变量在 Kotlin 中的工作方式。在这里,我有一段代码进行布尔检查以查看车辆是否超载。实现是处理可空变量的好方法还是有更优雅的方法?

class Route(var vehicle: Vehicle?, var  jobs: List<Job>?) {
    constructor()
    constructor(vehicle: Vehicle?)

    fun isOverCapacity() : Boolean {
        val vehicleCapacity = vehicle?.capacity
        if (vehicleCapacity != null){
            val totalDemand = jobs?.sumBy { job -> job.demand }
            if (totalDemand != null) {
                return totalDemand > vehicleCapacity
            } 
        }
        return false
    }
}

非常感谢!

【问题讨论】:

    标签: kotlin


    【解决方案1】:
    fun isOverCapacity(): Boolean {
        val vehicleCapacity = vehicle?.capacity ?: return false
        val totalDemand = jobs?.sumBy { job -> job.demand } ?: return false
        return totalDemand > vehicleCapacity
    }
    

    What does ?: do in Kotlin? (Elvis Operator)

    【讨论】:

      【解决方案2】:

      通过使用 kotlin std-lib dsl 函数运算符,例如 let、run、also、apply、use。

      使用?. -> 如果对象/值不为空,则只调用下一个函数。

      • let -> 返回 lambda 表达式的结果。
      • run -> 返回将 this 作为接收者传递的 lambda 表达式的结果。
      • also -> 执行操作并返回自身,这与 lambda 的结果不同。
      • apply -> 执行操作并返回自身,这与 lambda 将其作为接收者传递的结果不同。
      • 使用 -> 返回 lambda 表达式的结果并关闭 Closeable 资源。

      您可以将代码简化如下:

      fun isOverCapacity() : Boolean =
          vehicle?.capacity?.let { vehicleCapacity ->
              jobs?.sumBy { job -> job.demand }?.let { totalDemand ->
                  totalDemand > vehicleCapacity
              }
          } ?: false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2014-03-11
        • 1970-01-01
        • 2014-01-16
        • 2017-02-05
        相关资源
        最近更新 更多