gpt4 book ai didi

kotlin - 使用 kotlin 进行函数式编程 - 避免 var

转载 作者:行者123 更新时间:2023-12-04 08:21:48 25 4
gpt4 key购买 nike

我正在使用 kotlin 和函数式编程来开发 api。我真的不知道我在这里使用是否违反了任何 FP 规则。
我有一个以下函数,它给了我 customerNumber 和一堆其他字段。

data class CustomerInfo(val customerNumber:String?=null,val accountNumber:String?=null,val email:String?=null)
我有很多条件的功能,但所有领域的条件都相同
fun getCustomerInfo(someDto:SomeDto,someOtherDto:SomeOtherDto,oneMoreDto:OneMoreDto):CustomerInfo
{
var customerNumber = someDto.id
var accountNo = someDto.accountNumber
var email = someDto.email

if(someCondition())
{
customerNumber= someOtherDto.id
accountNo = someOtherDto.accountNo
email = someOtherDto.email
}else if(someOtherConditiion)
{
customerNumber= oneMoreDto.id
accountNo = oneMoreDto.accountNo
email = oneMoreDto.email
}
//and many more conditions like this
return CustomerInfo(customerNumber,accountNo,email)
}
正在使用 无功里面的一个函数是错误的?这里不使用var怎么写这个函数?
我知道一旦条件满足,我每次都可以直接返回 dto,但我想在 10 个条件下使用相同的 dto?任何帮助将不胜感激

最佳答案

使用 var 在技术上没有任何错误,因为您在函数的本地范围内。
但是您可以避免使用大量样板代码,例如:

fun getCustomerInfo(someDto:SomeDto,someOtherDto:SomeOtherDto,oneMoreDto:OneMoreDto):CustomerInfo
{
return when {
someCondition() -> CustomerInfo(someOtherDto.id, someOtherDto.accountNumber, someOtherDto.email)
someOtherConditiion() -> CustomerInfo(oneMoreDto.id, oneMoreDto.accountNumber, oneMoreDto.email)
else -> CustomerInfo(someDto.id, someDto.accountNumber, someDto.email)
}
}
如果您生成了所有(不同的)DTO,您可以考虑为它们创建映射器扩展函数:
// top-level functions
fun SomeDto.toConsumerInfo(): CustomerInfo = ConsumerInfor(id, accountNumber, email)
fun SomeOtherDto.toConsumerInfo(): CustomerInfo = ConsumerInfor(id, accountNumber, email)
fun OneMoreDto.toConsumerInfo(): CustomerInfo = ConsumerInfor(id, accountNumber, email)
// and more for other DTO's you want to map
然后你可以像这样使用它们:
fun getCustomerInfo(someDto:SomeDto,someOtherDto:SomeOtherDto,oneMoreDto:OneMoreDto):CustomerInfo {
return when {
someCondition() -> someOtherDto.toConsumerInfo()
someOtherConditiion() -> oneMoreDto.toConsumerInfo()
else -> someDto.toConsumerInfo()
}

关于kotlin - 使用 kotlin 进行函数式编程 - 避免 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65462637/

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