Comments 13
Да. Возможно я неправильно выразился, но я вовсе не хотел указывать, что это особенность генераторов.
Спасибо, что указали на последний пример. Кажется я слишком увлекся символами и совсем не подумал об очевидном применении генератора.
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)»
[1..10]
, но и arr[:2]
. Вообще, меня удручает, что бабеля так мало в реальных проектах, ну вот я бы, например, обрадовался оператору |>
для замены функции pipe()
в RxJSДобро пожаловать в 2020, что pipe operator
, что range
уже есть в пропозалах https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80
Он там уже почти пять лет в пропозалах, из них почти 3 года в stage 1.
Шикарно! Буду отслеживать! А пробные реализации видели?
https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator есть как раз таки плагин бабеля
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
Змеиный сахар или пишем свой range в JavaScript