【发布时间】:2023-03-21 08:01:01
【问题描述】:
我想以功能方法处理验证。我有如下的用户验证逻辑
- 如果用户对象为空,则抛出异常
- 如果用户不活跃,则抛出异常
- 如果用户类型是 super 什么都不做。如果用户类型是 admin 做一些操作。
在我的代码 sn-p 中,如果生成的随机数是偶数,则抛出异常,否则完成流程。
* You can edit, run, and share this code.
* play.kotlinlang.org
*/
import java.time.Instant
import java.util.UUID
import java.lang.IllegalStateException
import java.util.Random
fun main() {
val user : User? = User(UUID.randomUUID(),Instant.now(),UserStatus.ACTIVE,UserType.SUPER)
//val user : User? = User(UUID.randomUUID(),Instant.now(),UserStatus.ACTIVE,UserType.NORMAL) // works fine
user?.let{ existing -> existing.takeIf{it.status == UserStatus.ACTIVE}?.let{ activeUser ->
activeUser.takeUnless{ user -> user.userType == UserType.SUPER}?.let{
val number = Random().nextInt(5);
println(number)
if(number %2 == 0) throw IllegalStateException("invalid random number")
}
}?: throw IllegalStateException("User is not active right now")
} ?:throw IllegalStateException("user not created at all")
}
data class User(val uuid:UUID, val created:Instant, val status:UserStatus, val userType:UserType)
enum class UserStatus {
ACTIVE,INACTIVE
}
enum class UserType{
SUPER,NORMAL
}
当生成的随机数是奇数时,它会抛出错误消息user is not active right now,这是不正确的。它应该默默地完成函数调用。任何人帮助我代码有什么问题?
【问题讨论】:
-
代码中没有任何内容表明“用户处于非活动状态”。您指的是“订阅”吗?
-
是的.. 更新了代码以反映正确的代码。
-
你能把代码放在问题中而不是第 3 方网站吗?
-
完成..更新代码
-
请使用适当的缩进,以便我们遵循代码结构。
标签: kotlin scope functional-programming let