Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

566
Visualizações
¿Por qué la convención de nomenclatura *Async para las funciones que devuelven Deferreds?

Intellij tiene una inspección (es decir, verificación de pelusa) que le indica que las funciones que devuelven Deferred deben llamarse algo que termine en Async .

ingrese la descripción de la imagen aquí

Las convenciones de nomenclatura como estas tienen sentido para mí en lenguajes de escritura dinámica. Pero Kotlin tiene un buen corrector de tipos y un ecosistema de herramientas, entonces, ¿por qué confiar en la convención?

Especialmente porque las corrutinas de Kotlin incorporan la concurrencia estructurada , la función probablemente también tomará un parámetro CoroutineScope , que serviría la misma señal visual en el sitio de la llamada:

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

Como nota al margen, entiendo el mensaje de la inspección de que rara vez querrá una función que devuelva una función Deferred en lugar de una función de suspend . Esa no es mi pregunta. Mi pregunta supone que sabes lo que estás haciendo y quieres un Deferred .

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Para empezar, una función casi nunca debería devolver un Deferred que provenga de un bloque async . Depende de la persona que llama envolver alguna unidad de trabajo en un async mientras realiza otro trabajo en primer plano, luego await el resultado asíncrono antes de regresar y envolver todo ese código en un coroutineScope .

La fuente prevista de las instancias Deferred es la capa de adaptación entre las corrutinas de Kotlin y las API asíncronas de terceros. Para tales llamadas, tiene sentido poner Async en el nombre e incluso algunas API de Java siguen esta convención. Por ejemplo, usted puede tener un

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

y usarlo como

 val orderCancelled = fetchOrder(orderId).isCancelled

Este código es de tipo seguro y correcto, no causa ningún error de compilación. Parece que está obteniendo un pedido de un sistema remoto y luego verifica el estado del pedido (si está cancelado), pero lo que realmente está haciendo es obtener un Deferred<Order> aplazado y verificar si el Deferred está cancelado. Debido a que al nombre de su función le falta Async , este tipo de error es difícil de detectar.

Sí, también puede solicitar al IDE que le proporcione el tipo de devolución, pero puede pasar un tiempo antes de que sospeche lo que está sucediendo.

over 4 years ago · Santiago Trujillo Relatório

0

Deferred no devuelve el valor real, pero es "un futuro ligero sin bloqueo que representa una promesa de proporcionar un resultado más adelante".

Como no puede ver esto en el nombre del método, "nombramos tales funciones con el sufijo "...Async" para resaltar el hecho de que solo inician el cálculo asíncrono y uno necesita usar el valor diferido resultante para obtener el resultado".

Entonces, el lector de su código puede ver instantáneamente que su método no devuelve el valor real, pero además tiene que llamar a await() en él.


A su segundo punto sobre la función de suspend :

Por lo general, es al revés, la función xyzAsync() llama a la función suspend xyz() .

Como las funciones que devuelven Deferred se pueden llamar desde cualquier lugar, no solo desde las funciones suspendidas.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda