Kotlin是否存在原生的条件式.also函数?
Kotlin是否有原生的条件式
.also函数? Kotlin标准库中没有原生提供类似你需求的.alsoIf这种带条件判断的链式扩展函数。
你自己实现的alsoIf函数非常贴合使用场景,它的设计风格和标准库中的also、let等作用域函数保持一致,并且因为标记为inline,不会带来额外的性能开销,完全可以放心使用:
private inline fun <T> T.alsoIf(shouldRunBlock: (T) -> Boolean, block: (T) -> Unit): T { if (shouldRunBlock(this)) { block(this) } return this }
如果不想自定义函数,也可以通过标准库中的takeIf配合also实现类似效果,但写法相对繁琐:
extractProcessorCode(originalRequest) .also { transactionType -> transactionType.takeIf { it == UNKNOWN }?.also { logger.warn("ProcessorTransactionType unsuccessfully extracted from originalRequest for id: $id") } }
显然这种写法不如你自定义的.alsoIf简洁直观,所以更推荐使用你自己实现的版本。
内容的提问来源于stack exchange,提问作者Max Hunter
相关产品推荐
相关产品推荐

