gpt4 book ai didi

kotlin - 为什么返回延迟的函数的 *Async 命名约定?

转载 作者:行者123 更新时间:2023-12-02 12:03:21 31 4
gpt4 key购买 nike

Intellij 有一个检查(即 lint 检查),它告诉您返回 Deferred 的函数应该命名为以 Async 结尾的东西.

enter image description here

在动态类型语言中,像这样的命名约定对我来说很有意义。但是 Kotlin 有这么好的类型检查器和工具生态系统,那么为什么要依赖约定呢?

特别是因为 Kotlin 协程烘焙 structured concurrency在,该函数可能还会带一个 CoroutineScope参数,它将在调用站点提供相同的视觉提示:

suspend fun doStuff() = coroutineScope {
doStuffAsync(this /* CoroutineScope */).await()
//...
}

作为旁注,我理解检查的消息,您很少需要返回 Deferred 的函数。而不是 suspend功能。那不是我的问题。我的问题假设您知道自己在做什么并且想要一个 Deferred .

最佳答案

首先,函数应该几乎从不返回 Deferred来自 async堵塞。由调用者将一些工作单元包装到 async 中。在前台做其他工作时,然后 await在返回之前处理异步结果,并将所有代码包装在 coroutineScope 中.
Deferred 的预期来源实例是 Kotlin 协程和第 3 方异步 API 之间的适配层。对于此类调用,放置 Async 确实有意义在名称中,甚至一些 Java API 都遵循此约定。例如,您可能有一个

fun fetchOrder(id: String): Deferred<Order>

并将其用作
val orderCancelled = fetchOrder(orderId).isCancelled

此代码是类型安全且类型正确的,不会导致任何编译器错误。看起来它正在从远程系统获取订单,然后检查订单状态(是否已取消),但实际上它正在做的是获取 Deferred<Order>并检查 Deferred取消。因为你的函数名不见了 Async ,这种错误很难发现。

是的,您也可以请求 IDE 为您提供返回类型,但您可能需要一段时间才能怀疑发生了什么。

关于kotlin - 为什么返回延迟的函数的 *Async 命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55108287/

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