Подтвердить что ты не робот

В Котлин я могу создать диапазон, который учитывается в обратном направлении?

Я посмотрел документацию для диапазонов, и я не вижу упоминания о задних диапазонах.

Можно ли сделать что-то вроде:

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

И получите результаты:

100
99
98
...
4b9b3361

Ответ 1

Используйте downTo как в:

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

Ответ 2

Реверсированные диапазоны поддерживаются с помощью унарного оператора минус -, как в -(1..100).

Чтобы вызвать метод в этом диапазоне, вам необходимо окружить его круглыми скобками, как в (-(1..100)).foreach { println(it) }.

Ответ 3

Как указано другими, правильный ответ

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

Но почему команда Котлина выбрала 100 downTo 1 vs 100..1?

Я думаю, что синтаксис 100..1 был бы плохим, если мы попытаемся использовать переменные вместо литералов. Если мы набрали

for (n in b..a)

тогда было бы непонятно, какой цикл мы хотели использовать.

Мы могли рассчитывать на обратный отсчет, но если b окажется меньше, чем a, то наша программа будет на самом деле рассчитывать вверх! Это было бы источником ошибок.

Ответ 4

Если вы посмотрите на точную страницу, с которой вы связались, есть предложение для функции reversed, которая позволит вам сделать for (n in (1..100).reversed()), но пока не реализована. Оператор .. всегда рассчитывает.