Спасибо большое! давно для себя заметил, что примеры с reduce как то легче читаются, код компактнее и лаконичнее выглядит, все рядом
@romanserebrov47182 жыл бұрын
Тимур спасибо Вам огромное, отличные примеры, работа с данными одна из самых интересных тем для меня лично ))
@serjio87812 жыл бұрын
Топ контент, спасибо!
@anatolykobzisty98275 жыл бұрын
00:00:00 Введение 00:01:50 Простая проекция набора данных 00:09:23 Расширенная проекция набора данных 00:19:00 Расширенная проекция набора данных с кэшированием списка ключей 00:20:27 Оптимизация проекции набора данных с помощью императивного программирования 00:23:11 Линзы из функционального программирования 00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи ) 00:39:08 Сложная проекция набора данных с помощью декларативного программирования 00:41:57 Оптимизация сложной проекции 00:51:36 Синтаксис фильтрации 00:53:25 Вывод 00:58:08 Оптимизация 01:00:00 Обобщение
@Andrey-qf8uw4 жыл бұрын
Круто як завжди!
@МаксимКоковин-и9к4 жыл бұрын
Мне очень нравятся такие абстракции, аж мурашки по коже!!!)
@TheTexPro2 жыл бұрын
Спасибо большое!
@uaplatformacomua2 жыл бұрын
Тимуре, який ти класний препод 👍
@TimurShemsedinov2 жыл бұрын
Дякую, все для вас)
@Antonio-fm1sq3 жыл бұрын
Спасибо
@Karmazins5 жыл бұрын
medium.com/javascript-scene/lenses-b85976cb0534 Мне помогло допонять линзы :)
@ИванПетров-б8в6щ3 жыл бұрын
Ни@я не понял , но оочень интересно ! ))
@antonanton227436 жыл бұрын
Спасибо )
@ЙййЙйй-п8б4 жыл бұрын
Заковырка какая то примерчик с редьюсами с метаданными .. сложная абстракция... Это в вызове первый аргумент - методанные из партиал с , а второй аргумент (obj) откудова из мэпа получается приходит ? и этот obj приходит через рест параметры . так что ли ?
@victormog8 ай бұрын
Что-то я не понял, а не проще сделать класс, в который передавать объект, а его конструктор отберёт и преобразует, если нужно, любые нужные поля.
@TimurShemsedinov8 ай бұрын
Не проще, с классом в каждом случае нужно писать императивный код, а с проекцией просто декларативную структуру, она и нагляднее и пишется проще и тестировать ее не нужно, по сути это схема, а не код
@victormog8 ай бұрын
@@TimurShemsedinov поверю Вам на слово, т.к. ещё, видимо, не дорос до такого... Я DTO через класс организовываю... Попробую осмыслить это видео. Спасибо!
@vsuschenko5 жыл бұрын
какая рекурсия в projection? где вы ее увидели?
@TimurShemsedinov5 жыл бұрын
на какой минуте?
@vsuschenko5 жыл бұрын
@@TimurShemsedinov 7:25
@TimurShemsedinov5 жыл бұрын
@@vsuschenko а, ну конечно, reduce приводит к косвенной рекурсии или непрямой рекурсии. В reduce передается колбэк, и по завершению этого колбэка reduce его повторно вызывает. Это все равно, что рекурсия.
@vsuschenko5 жыл бұрын
@@TimurShemsedinov там то же самое, что и в методе map. или forEach. просто передается результат который колбек вернул на предыдущей итерации. причем тут рекурсия? developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce почитайте описание. там внизу и полифил есть для старых браузеров. как видно - никакой рекурсии. обычный цикл.
@TimurShemsedinov5 жыл бұрын
@@vsuschenko сори, это я функциональным программированием перезанимался, классический функциональный reduce он рекурсивный, потому, что нельзя циклы писать, вот он: const reduce = (fn, acc, [cur, ...rest]) => cur === undefined ? acc : reduce(fn, fn(acc, cur), rest); Я согласен, что у Array.prototype.reduce действительно сделан на циклах, но это видно не из-за полифила, он все же написан на C++ внутри V8, а понятно это из-за того, что не случается переполнения стека на reduce огромных массивов.
@RK-gm4pd11 ай бұрын
тяажкувато сприймається... доки в консоль не виведеш проміжні результати, важко слідкувати. і консолів треба не мало
@romankovalchuk86486 жыл бұрын
Спасибо еще раз (случайно удалил предидущий коментарий) . Вот код разширеный projection для работы с вложеными дикшинари, без оборачивания в класс. Вы совершенно верно заметили, что просто так этого делать не нужно. const projection = (meta) => { const keys = Object.keys(meta); // debugger; const mapper = obj => { const hash = {}; for (const key of keys) { const def = meta[key]; const [name, transform] = def; let val = obj[name]; if (val !== void 0) { if (transform) { const cls = Object.prototype.toString().call(transform).slice(8,-1); switch(cls){ case 'Function': val = transform(val);break; case 'Object': val = projection(transform)(val);break; case 'Array': val = val.map(projection(transform));break; } } hash[key] = val; } } return hash; }; return mapper; }
@bodfxua76983 жыл бұрын
Не спорю все круто но чисто для мене важко навчатись в такому режимі перегляду слайдів дуже багато чого не зрозуміло((
@randomtron3 жыл бұрын
> JavaScript выработает скрытый класс. Вообще-то движок, в нашем случае V8, выработает скрытый класс.
@Cheetaqueue2 жыл бұрын
как же ты хорош, указал автору на его ошибку
@RisDeep4 жыл бұрын
Сложно написанный код. Несколько заходов, всё ещё не досмотрел.
@TimurShemsedinov4 жыл бұрын
Ну это же не первая лекция, нужно начинать с простого