首页 > 解决方案 > 我可以以某种方式结合布尔检查和空检查吗?我想知道这个kotlin方法是否可以进一步简化

问题描述

我是 Kotlin 的新手,我想知道可以简化以下方法的最优化方式。

如果金额由 X 人支付,则我需要退还应付金额,否则我需要退还 0。

在下面的代码中,支付是一个可以为空的对象。它包含retailAmount,它也是一个可以为空的对象。RetailAmount包含baseCharges,它是一个 Double。(另外,如果支付零售金额为空,我需要返回 0)

// get charges payable by X(Retailer/Shopkeeper/Customer)
fun getChargesPayableByX(personX: String): Double {
    // are charges payable by X(Retailer/Shopkeeper/Customer)?
    if (areChargesPayableByX(personX)) {  
        return payments?.retailAmount?.baseCharges ?: 0.0
    }
    return 0.0
}

标签: kotlinnullablesimplifysimplification

解决方案


您可以执行以下操作:

fun getChargesPayableByX(personX: String): Double = 
    areChargesPayableByX(personX).takeIf{it == true}?.let{ payments?.retailAmount?.baseCharges } ?: 0.0

推荐阅读