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.

  • ¿Las coroutines de kotlin tienen llamada asincrónica con timer?
  • Property setter con diferente tipo
  • Construyendo un proyecto de Kotlin + Java 9 con Gradle
  • Implementar Hashmap con diferentes types de valores en Kotlin
  • Alcance de la variable definida en el encabezado de bucle for
  • Daga 2: inputs múltiples con la misma key
  • Kotlin `this` no devuelve la instancia correcta en class henetworkingada
  • ¿Hay alguna manera de filtrar nulo Any? valores en Kotlin Map?
  • Acceso al reino desde un hilo incorrecto en Espresso
  • Cómo señalar un observable para producir más datos
  • Kotlin Función anónima Parámetro Unidad de testing