Как стать автором
Обновить

Комментарии 11

Мне кажется, слова «ленивый» и «LINQ» в заголовке сделали бы намного яснее суть поста.
Добавил "(ленивые)" в хедлайн.
Просветите пожалуйста, какое практическое применение всего этого (желательно на простом примере). Спасибо.
Такой логический Range можно пихать в алгоритмы, заточенные на приём обычного Range (например массива). В случае с логическим Range нам не нужна память для хранения исходного массива, плюс он может быть бесконечным.

Бесконечность: например бесконечный range задаёт карту высот для некоторой двумерной поверхности в игре, мы можем промотать карту на сколько угодно вправо и влево и отрисовать поверхность, с минимальным расходом памяти.
Ага, вроде дошло. Но при этом нам же придется каждый раз вычислять значение нового элемента. И чем сложнее функция, тем больше это будет влиять на производительность. Или нет?
Ничем, это так называемый «синтаксический сахар». Повышается читаемость кода.
Ну плюс еще можно «закэшировать» часть данных «последовательности» (если напишите соответствующую реализацию).
Да, придётся. Но иногда это не критично, а ингда и вовсе не важно.
Не важно, когда исходный массив требуется ровно один раз, например нам нужен массив содержащий квадраты всех чисел от 1 до 5, мы можем записать:

var arr1 = new Array();

for( var i = 1; i <= 5; ++i )
{
arr[i-1] = i*i;
}

// или

var arr2 = Stream.range( 1, 5 ).map( function ( x ) { return x * x } );

// выше, правда, создаётся объект типа range (если я правильно понял)
// но наверное есть способ просто сконвертировать его в массив.


Плюсы такого подхода, как правильно написал smashercosmo: синтаксический сахар и возможность подсунуть свою последовательность алгоритмам, которые принимают на вход массивы.
Стоит также посмотреть на streamer.
Еще есть довольно популярная либа — wu.js
Думаю хорошим примером использования бесконечных массивов был бы список простых чисел генерируемый динамически на основе решета Эратосфена. Либа такое позволяет?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории