Closed frungl closed 1 year ago
Прежде чем добавлять фичу, неплохо бы её задизайнить :) .
Нынешний дизайн далёк от идеала.
И по выбору ключевого слова — а какое хорошее слово было бы парным к until
?)
И по семантике: цикл вверх на полуинтервале, а цикл вниз почему-то на отрезке.
Более развёрнутый пример.
Представим себе язык, в котором есть следующие управляющие конструкции:
if ... fi
for ... endfor
while ... end while
do { ... } while ... ;
Ничего не смущает? :)
(половина этого примера вполне себе есть в языке Metapost)
Итак, вопросы про цикл вниз, на которые надо бы ответить до написания кода:
У меня нет, кстати, хорошего ответа на последний вопрос.
Нужен ли он вообще? Хороший ответ — примеры использования, из которых могут следовать ответы на следующие вопросы. Он был бы полезен в некоторых задачах, не хочется писать
while
сi -= 1
внутри.Какое ключевое слово хорошо подходит как парное к until? Почему бы и не
downto
? Я в данном выборе оперся на Kotlin, там именно так (https://kotlinlang.org/docs/ranges.html#range).Какой конец полуинтервала следует взять и почему? В
until
не включаем конец, так как хотим удобно работать с индексацией массива и.т.д. Сdownto
идея та же, хотим пройти по массиву, но с конца, но не будем же мы везде писатьdownto -1
, это непонятно, значит включаем конец.
Хмммм.
Я хочу, чтобы "for по умолчанию" был всё-таки на полуинтервалах, как во многих языках.
При этом downTo
в Котлине это антоним к rangeTo
, а не к until
.
После обсуждения решили, что неплохо сделать так:
for ... until
на полуинтервале как "дефолтный" вид фораfor ... upto
на отрезкеfor ... downto
на отрезкеДаже лучше не until
, upto
, downto
, а until
, rangeto
, downto
:
until
и upto
;
Поддержка ключевого слова
downto
дляfor
.Теперь можно писать так:
Вывод: 3 2 1