具有可为空变量的布尔表达式

我正在修补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
    }
}

非常感谢!

评论
时钟滴答响
时钟滴答响

By using kotlin std-lib dsl functional operators like let, run, also, apply, use.

Use of ?. -> if the object/value is not null then only call the next function.

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

您可以简化代码,如下所示:

fun isOverCapacity() : Boolean =
    vehicle?.capacity?.let { vehicleCapacity ->
        jobs?.sumBy { job -> job.demand }?.let { totalDemand ->
            totalDemand > vehicleCapacity
        }
    } ?: false
点赞
评论
uut
uut
fun isOverCapacity(): Boolean {
    val vehicleCapacity = vehicle?.capacity ?: return false
    val totalDemand = jobs?.sumBy { job -> job.demand } ?: return false
    return totalDemand > vehicleCapacity
}
点赞
评论