Комментарии 11
Мне кажется, слова «ленивый» и «LINQ» в заголовке сделали бы намного яснее суть поста.
+1
Просветите пожалуйста, какое практическое применение всего этого (желательно на простом примере). Спасибо.
0
Такой логический Range можно пихать в алгоритмы, заточенные на приём обычного Range (например массива). В случае с логическим Range нам не нужна память для хранения исходного массива, плюс он может быть бесконечным.
Бесконечность: например бесконечный range задаёт карту высот для некоторой двумерной поверхности в игре, мы можем промотать карту на сколько угодно вправо и влево и отрисовать поверхность, с минимальным расходом памяти.
Бесконечность: например бесконечный range задаёт карту высот для некоторой двумерной поверхности в игре, мы можем промотать карту на сколько угодно вправо и влево и отрисовать поверхность, с минимальным расходом памяти.
0
Ага, вроде дошло. Но при этом нам же придется каждый раз вычислять значение нового элемента. И чем сложнее функция, тем больше это будет влиять на производительность. Или нет?
0
Ничем, это так называемый «синтаксический сахар». Повышается читаемость кода.
Ну плюс еще можно «закэшировать» часть данных «последовательности» (если напишите соответствующую реализацию).
Ну плюс еще можно «закэшировать» часть данных «последовательности» (если напишите соответствующую реализацию).
0
Да, придётся. Но иногда это не критично, а ингда и вовсе не важно.
Не важно, когда исходный массив требуется ровно один раз, например нам нужен массив содержащий квадраты всех чисел от 1 до 5, мы можем записать:
Плюсы такого подхода, как правильно написал smashercosmo: синтаксический сахар и возможность подсунуть свою последовательность алгоритмам, которые принимают на вход массивы.
Не важно, когда исходный массив требуется ровно один раз, например нам нужен массив содержащий квадраты всех чисел от 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: синтаксический сахар и возможность подсунуть свою последовательность алгоритмам, которые принимают на вход массивы.
0
Еще есть довольно популярная либа — wu.js
0
банальный генератор. что тут нового?
habrahabr.ru/blogs/javascript/122620/
habrahabr.ru/blogs/javascript/122620/
0
Думаю хорошим примером использования бесконечных массивов был бы список простых чисел генерируемый динамически на основе решета Эратосфена. Либа такое позволяет?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Streams.js: отложенные (ленивые) вычисления в Javascript