Pull to refresh

Comments 13

UFO just landed and posted this here

Да. Возможно я неправильно выразился, но я вовсе не хотел указывать, что это особенность генераторов.
Спасибо, что указали на последний пример. Кажется я слишком увлекся символами и совсем не подумал об очевидном применении генератора.

Всегда можно ещё проще!

function* range(from, to, step = 1) {
    while (from < to) {
        yield from;
        from += step;
    }
}


И да, ладно, что нет проверок, что входные данные — это числа. Тут будут проблемы с отрицательным step ещё.

Надо бы проверить, что все параметры являются числами. Или преобразовать их в числа при помощи унарного плюса.


Потому что со строками функция range работает совершенно логичным, но не соответствующим своему названию образом.

А на Бабеле написать квадратные скобочки с поддержкой двоеточий внутри слабо?

С удовольствием посмотрим Вашу реализацию :)
Тем не менее, хотел бы отметить, что синтаксис [1..10] в JS невалиден, поскольку выкинет SyntaxError: Unexpected number из-за того, что это по сути попытка получить атрибут «10» числа «1.» — на это может намекнуть строка «15..toString(2)»
Ну дык на то и бабель — чтобы в итоге это был не JS. Про двоеточия я имел в виду не только [1..10], но и arr[:2]. Вообще, меня удручает, что бабеля так мало в реальных проектах, ну вот я бы, например, обрадовался оператору |> для замены функции pipe() в RxJS

Он там уже почти пять лет в пропозалах, из них почти 3 года в stage 1.

Шикарно! Буду отслеживать! А пробные реализации видели?

Только учтите, что перейдя на TypeScript вы начнёте его судорожно отовсюду выпиливать. Т.е. оно полностью ломает его, даже при выводе типов из js-файлов.

Для сравнения приведу питонокод со всем синтаксическим сахаром и без него:

for i in range(1, 10):
    print(i)


range_iter = range(1, 10).__iter__()

while True:
    try:
        value = range_iter.__next__()
        print(value)
    except StopIteration:
        break
Sign up to leave a comment.

Articles