En Kotlin, ¿puedo crear un range que cuente hacia atrás?

Miré la documentation de los Ranges y no veo ninguna mención de los ranges hacia atrás.

¿Es posible hacer algo como esto?

for (n in 100..1) { println(n) } 

Y obtenga resultados:

 100 99 98 ... 

Use downTo como en:

 for (n in 100 downTo 1) { // } 

Los ranges invertidos son compatibles usando el operador unario negativo como en -(1..100) .

Para invocar un método en ese range, deberá rodearlo con paréntesis como en (-(1..100)).foreach { println(it) } .

Como señalaron otros, la respuesta correcta es

 for (n in 100 downTo 1) { println(n) } 

¿Pero por qué el equipo de Kotlin eligió 100 downTo 1 vs 100..1 ?

Creo que la syntax 100..1 sería mala cuando intentemos usar variables en lugar de literales. Si escribimos

for (n in b..a)

entonces no estaría claro qué bucle queríamos usar.

Es posible que hayamos tenido la intención de contar hacia atrás, pero si b resulta ser más pequeño que a , ¡entonces nuestro progtwig realmente contaría hacia arriba! Esa sería una fuente de errores.

Si nos fijamos en la página exacta a la que se vinculó, hay una sugerencia para una function reversed que le permitiría hacer for (n in (1..100).reversed()) pero parece que todavía no está implementada. El operador .. siempre count hacia arriba.

  • Tramos de resorte con capucha de spring que no anidan en corotina Kotlin
  • Clase de datos Igualdad en Kotlin
  • Vert.x Kotlin Type Mismatch requinetworking Controlador <AsyncResult <Unit >> found (Handler <AsyncResult <Unit >>) -> Unidad
  • Las importaciones no se utilizan en Android Studio
  • Constructor de vista personalizada en Android 4.4 se bloquea en Kotlin, ¿cómo solucionarlo?
  • Smart Cast a 'Tipo' es imposible, porque 'variable' es una propiedad mutable que podría haber cambiado en este momento
  • Cómo combinar el flatmap y el anterior Single
  • Kotlin + Intelij + HtmlUnit: no se puede invocar ninguna de las siguientes funciones con los arguments suministrados
  • Kotlin: Cómo iniciarse perezoso en un vector
  • Diferencia entre una class y un object en Kotlin
  • Cómo llamar a la function baseactivity desde viewmodel en android