gpt4 book ai didi

java - 将多个方法包装成一个的函数式方法

转载 作者:行者123 更新时间:2023-12-01 17:52:30 24 4
gpt4 key购买 nike

我对函数式编程的世界相当陌生,我正在尝试 Kotlin 中的一些代码,下面给出的代码片段就是我所做的,但对我来说看起来非常有必要

@EmailTemplate("onCallTemplate")
fun retrieveNextOnCallCreateMailRecipientAndSendMail(time: LocalDateTime, trial: Boolean = true) {

val emailTemplateID =
extractEmailTemplateValue(
"retrieveNextOnCallAndSendMail")

val messageTemplate = emailTemplateID?.let { messageTemplateAccessPoint.findByID(it) }


val lisOfOnCalls = dataHubCommunicator
.listOfOnCallToSendNotificationFromDataHub(time)

val listOfMailRecipient = lisOfOnCalls
?.let { onCallListToMailRecipient.buildMailRecipientFromOnCalls(it) }


listOfMailRecipient
?.let {
messageTemplate
?.let { it1 ->
emailSender
.sendNotificationToOnCallPersons(it, it1, trial)
}
}

log.info("Message Has been sent Successfully")

}

此函数的工作方式类似于聚合器,它从其他函数检索并调用相应的值/状态。我不喜欢这个方法的是到处声明变量(val/var)来存储要传递给其他方法的值。

为了可读性,我也不能这样做

onCallListToMailRecipient.buildMailRecipientFromOnCalls(dataHubCommunicator
.listOfOnCallToSendNotificationFromDataHub(time))

是否有任何声明性方式来编写此方法。我可以做哪些更改以使其更具声明性/功能性。

最佳答案

您可以合并一些计算并减少局部变量的数量。另外,最后两个 let 序列相当无用,只需使用局部变量调用该函数即可。我添加了一些 null 检查。

val messageTemplate = extractEmailTemplateValue("retrieveNextOnCallAndSendMail")?.let {
messageTemplateAccessPoint.findByID(it)
} ?: throw IllegalStateException (“Todo”)

val listOfMailRecipient = dataHubCommunicator.listOfOnCallToSendNotificationFromDataHub(time)?.let {
onCallListToMailRecipient.buildMailRecipientFromOnCalls(it)
} ?: throw IllegalStateException (“Todo”)

emailSender
.sendNotificationToOnCallPersons(listOfMailRecipient, messageTemplate, trial).also{
println("Message Has been sent Successfully")
}

关于java - 将多个方法包装成一个的函数式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com