Было полезно) Спасибо за урок) Убедительная просьба Владилен, если будешь продолжать дальше этот плейлист, то приводи примеры, где используется это на практике, а если не приводишь пример в коде, то хотя бы просто словами "Вот он используется в списке, еще там в том то и том то". Так проще это воспринимать, зачем и куда его пихать
Так это-же аналог yield return из шарпа! Владилен, благодаря тебе, штуки, которые казались сложными и непонятными становятся простыми и приятными в понимании! Ты делаешь обалденные ролики! Спасибо, бро!
удобная штука для создания тестовых данных. например этот код создает массив из случайных 10 чисел от 0 до 1000 function* olala(n){ for (let i = 0; i < n ; i++){ yield ~~(1000*Math.random()); } } var a = [...olala(10)]; console.log(a);
@@TheSmilewind ага, еще бы просто взять итерируемый объект сделать и выйдет тот же генератор. Только полностью ручками написанный. Конечно понятно, что для упрощения ввели в язык, но можно легко без них обойтись
Мне кажется, что лучше объяснять от задачи. И поскольку любая задача решается разными способами, показывать, почему конкретная задача решается оптимальнее, к примеру, с помощью генераторов. Но всё равно лайк )
const str = 'Hello my friend, how\'re ur doing?' const str2 = [...str] function* name() { for(let i = 0; i < str2.length; i++){ yield str2[i] } } const str3 = name() можно и так
Крутые лекции, очень хорошее и понятое изложение, как новичкам, так и практикующим лишним не будет, однозначно! Хочу внести предложение на темы, web worker, buffer, shadow dom, темы классные, но раскрывают как правило не очень, а для пытливых умов, твой стиль изложения самое то!
Спасибо, не знал о таком способе написания функций, в смысле что где gen(n=10) перед этим нет function ввело в ступор малость:) И насколько помню, ключевая разница от обычной функции с return это экономия памяти, хотя чуть медленнее
Здесь также можно было бы рассказать про LexicalEnviroment и [scope], ибо не сразу было понятно откуда у возвращаемой функции next() доступ к i и n переменным. А в остальном все супер конечно!
Тут абсолютно обо всём надо было бы рассказать - почему генераторы, какие задачи решают, асинхронные генераторы (с примером своей имплементации async / await), for await of и делегация (он даже этого не затронул, хотя это основа генераторов). Это бесполезный урок
про замыкания рассказывалось в 3 уроке, так что откуда доступ у next понятно. А вот как работает let of iterator, не вызывая каждый раз next заново, не понятно
Ну тут суть в том что, вызывающая сторона (та что функцию вызывает) не имеет контроля над функцией и получается так что функция отработала, вернула результат и все. А с помощью генератора та сторона что вызывает его получает полный контроль над функцией, то есть она может контролировать каждый этап выполнения) Ну крутая же штука )
Что заметил. При создании генератора через function* он выводит значение до крайнего, убирая крайнее. Т.е. например: 1, 2, 3 ... 10 и с переходом на следующий цикл, если например наша n = 11, он говорит undefiend, done: true. С самонаписанным генератором ситуация другая. Он выводит список полностью и уже переходе на следующее значение выдает undefiend, done: false.
Спасибо! Не знал о таком. Когда пользовался for of, преобразовывал объект с объектами из return функции. Это намного упростит внешний вид, и не выглядит как костыль
Не очень понятно, почему пишем [Symbol.iterator](n=10) {...}. Почему он в квадратных скобках в этом примере? Мы же просто хотим определить его для итерации как функцию в этом примере?
Я так понимаю это про closure (замыкание). Функция `gen()` создаёт приватный контекст внутри себя - переменную `i` и возвращает из себя объект, внутри которого есть функция 'next', которая имеет доступ к этому контексту. Причём доступ к `i` имеет только функция `next`. Добраться к `i` по другому никак нельзя. И суть замыкания в том, что мы вызывали `iterator.gen()` - он вернул нам объект, в приватной видимости которого есть переменная `i`. Эта переменная существует ТОЛЬКО для этого объекта (ближайший слабый аналог - это приватное поле в классе). И переменная `i` сохраняется до тех пор, пока существует сам объект. Вот тут круто про замыкания ruclips.net/video/kizGhzeNE64/видео.html
я понял, как можно усложнить цикл for ещё одним способом. не понял зачем. или это только для того, чтоб вернуть набор объектов из функции и работать с ним в for of? пойду погуглю.
Можно ли как в Python сгенерировать например двумерный массив? В Py одной строкой: arr = [0 for j in range(3)] for i in range(3)] Много кода получается. function gen() { let arr1 = []; for (let i = 0; i < 3; i++) { let arr2 = []; for (let j = 0; j < 3; j++) { arr2.push(0); } arr1.push(arr2); } return arr1; } const ar = gen(); console.log(ar);
Спасибо за крутые уроки. Вождение вопрос по генераторам. Я правильно понимаю, что список значений они генерируют инициализации. Допустим, я хочу получать из базы последовательно некоторые записи, пока они не закончатся. Генератор в этом случае не получится использовать?
Ну тут суть в том что, вызывающая сторона (та что функцию вызывает) не имеет контроля над функцией и получается так что функция отработала, вернула результат и все. А с помощью генератора та сторона что вызывает его получает полный контроль над функцией, то есть она может контролировать каждый этап выполнения) Ну крутая же штука )
Для пользования некоторыми библиотеками. Redux Saga построена на генераторах к примеру. Это промежуточный слой между Iterator и Async/Await. На медиуме есть статья "Зачем они нужны в JavaScript? Symbol, Iterator, Generator" Там на пальцах описано что есть что и для чего.
@@Fakeusert если они не обязательны то нахрена их ставить, в котлине вот умные, сразу избавились от них, они максимум нужны когда код в чистом виде интерпритируеться в сжатом виде, тогда лучше конечно ставить, а то ошибки будут
Было полезно) Спасибо за урок) Убедительная просьба Владилен, если будешь продолжать дальше этот плейлист, то приводи примеры, где используется это на практике, а если не приводишь пример в коде, то хотя бы просто словами "Вот он используется в списке, еще там в том то и том то". Так проще это воспринимать, зачем и куда его пихать
Всеми любимый async…await использует под капотом генераторы.
@@shamilmammadov8246 Спасибо)
Вы просили генераторы
В этом видео разберем, как они работают)
а про регулярные выражения тоже будут?
и про деплой накст приложения в фаербэйс
Timecodes:
0:04 - Generator
11:14 - for...of
12:35 - [Symbol.iterator]
Так это-же аналог yield return из шарпа! Владилен, благодаря тебе, штуки, которые казались сложными и непонятными становятся простыми и приятными в понимании! Ты делаешь обалденные ролики! Спасибо, бро!
удобная штука для создания тестовых данных. например этот код создает массив из случайных 10 чисел от 0 до 1000
function* olala(n){
for (let i = 0; i < n ; i++){
yield ~~(1000*Math.random());
}
}
var a = [...olala(10)];
console.log(a);
Можно и обычной функцией
function app(n,arr = []){
while(n > 0){
arr.push(Math.round(Math.random() * 1000));
n--;
}
return arr;
}
console.log(app(10));
@@GeorgyDev11111 можно и так, да
@@КиселевСергей-ъ1о Имхо бесполезная функциональность для вебразработки. Такое чувство, что это придумали специально для кодварсов.
круто! осталось найти, где применить)
В redux-saga например
без реальных примеров, не особо применишь в деле генераторы.
выглядит просто ненужной безделушкой генератор.
Генератор позволяет пройтись по большому списку не загружая весь список сразу, а лишь по одному элементу за раз.
ага... ещё бы придумать такое место, где без генераторов ну прям совсем не обойтись ))
@@TheSmilewind ага, еще бы просто взять итерируемый объект сделать и выйдет тот же генератор. Только полностью ручками написанный. Конечно понятно, что для упрощения ввели в язык, но можно легко без них обойтись
Babel использует для создания классов :) можно глянуть во что превращается транспилированный код.
@@grommaks Речь шла про генераторы как про синтаксический сахар, а не про Babel. Это транспилятор, итак знают
Единственный человек, который не ставит ";" в конце строки
Владилен, Вы один из немногих, кому можно смело ставить лайк до просмотра.
Мне кажется, что лучше объяснять от задачи. И поскольку любая задача решается разными способами, показывать, почему конкретная задача решается оптимальнее, к примеру, с помощью генераторов. Но всё равно лайк )
благодаря вашему видео понял наконец принцип работы генератора. Спасибо Вам!
const str = 'Hello my friend, how\'re ur doing?'
const str2 = [...str]
function* name() {
for(let i = 0; i < str2.length; i++){
yield str2[i]
}
}
const str3 = name()
можно и так
В перерыве между серенами учусь. очень круто обьяснил! Спасибо!
теж
@@boyywnkobe Бежать надо было, походу вас там всех до 16 планируют в окопы отправить.
@@podpalmoi проти чуми такої як ти - залюбки!
Крутые лекции, очень хорошее и понятое изложение, как новичкам, так и практикующим лишним не будет, однозначно! Хочу внести предложение на темы, web worker, buffer, shadow dom, темы классные, но раскрывают как правило не очень, а для пытливых умов, твой стиль изложения самое то!
Спасибо, не знал о таком способе написания функций, в смысле что где gen(n=10) перед этим нет function ввело в ступор малость:)
И насколько помню, ключевая разница от обычной функции с return это экономия памяти, хотя чуть медленнее
Это равносильно записи
const iter = {
gen: function() {}
}
Обычный упрощенный ES6 синтаксис
Пока не понял как использовать на практике 😒
Ну есть мысль что эт можно для анимации какой-то поэтапной юзать
Наверное можно попробовать асинхронность победить - типа next
Красота! Можно будет флексануть знаниями, если будут спрашивать на собеседовании
Для собеседования есть отдельный ролик)
@@VladilenMinin благодарю за ваш труд
Здесь также можно было бы рассказать про LexicalEnviroment и [scope], ибо не сразу было понятно откуда у возвращаемой функции next() доступ к i и n переменным. А в остальном все супер конечно!
Тут абсолютно обо всём надо было бы рассказать - почему генераторы, какие задачи решают, асинхронные генераторы (с примером своей имплементации async / await), for await of и делегация (он даже этого не затронул, хотя это основа генераторов). Это бесполезный урок
@@volodymyrdoskochinskiy5032 во во, я про генераторы знал но хотел понять для чего они, какое у них практическое применение, так и не увидел
про замыкания рассказывалось в 3 уроке, так что откуда доступ у next понятно. А вот как работает let of iterator, не вызывая каждый раз next заново, не понятно
Хорошо что есть видеоролики, а то бывает ничего не понимаешь читая lerarnJavaScript. спасибо!
Спасибо за урок!!!
Ну тут суть в том что, вызывающая сторона (та что функцию вызывает) не имеет контроля над функцией и получается так что функция отработала, вернула результат и все. А с помощью генератора та сторона что вызывает его получает полный контроль над функцией, то есть она может контролировать каждый этап выполнения) Ну крутая же штука )
ты в 2 предложения уместил больше смысла, чем автор в своём 20минутном видео )
Что заметил. При создании генератора через function* он выводит значение до крайнего, убирая крайнее. Т.е. например: 1, 2, 3 ... 10 и с переходом на следующий цикл, если например наша n = 11, он говорит undefiend, done: true. С самонаписанным генератором ситуация другая. Он выводит список полностью и уже переходе на следующее значение выдает undefiend, done: false.
Может трабл в том, как ты прописываешь цикл for?
@@libertariancom вот это вброс через почти 3 года. Я уже не помню. Да и переехал на другой язык
@@cat_ashere Куда переехал?
@@libertariancom Dart + Flutter
Супер объяснение, мое восхищение 👍 также присоединяюсь к комментам выше, хочется понять где лучше использовать на практике
Спасибо! Не знал о таком. Когда пользовался for of, преобразовывал объект с объектами из return функции. Это намного упростит внешний вид, и не выглядит как костыль
Владилен, спасибо!!!
Приятного обучения)
js не люблю, но послушать было интересно
четко, подробно и по делу рассказано, примеры тоже понравились, спасибо
Спасибо, за урок. Не везде эта тема встречается и хорошо объясняется
Огромное спасибо за Ваши уроки, с Наступающим 2022 годом ! ))))))))))
Отличный канал.понятный контент!Спасибо!!!
Спасибо за урок!
Спасибо! Клевые у тебя уроки по javascript.
cпасибо
Комментарий для продвижения видео!!!
Спасибо!
Не очень понятно, почему пишем [Symbol.iterator](n=10) {...}. Почему он в квадратных скобках в этом примере? Мы же просто хотим определить его для итерации как функцию в этом примере?
Круто, спасибо за урок
Для чего нужны генераторы? Где это можно использовать?
Полезно, спасибо!
Спасибо за урок🙂
Спасибо, полезно!
Как же всё в голове ломается после обычных компилируемых ЯП, когда пытаешься вникнуть в JS
Ощущение, будто мозгу наизнанку выворачиваешь
Все очень доходчиво. Спасибо
Было полезно. Спасибо
спасибо большое за полезный контент =)
Все понятно объяснено!
Супер
а где переменная i храниться если ее нет в объекте с методом next 10:36
Я так понимаю это про closure (замыкание). Функция `gen()` создаёт приватный контекст внутри себя - переменную `i` и возвращает из себя объект, внутри которого есть функция 'next', которая имеет доступ к этому контексту. Причём доступ к `i` имеет только функция `next`. Добраться к `i` по другому никак нельзя. И суть замыкания в том, что мы вызывали `iterator.gen()` - он вернул нам объект, в приватной видимости которого есть переменная `i`. Эта переменная существует ТОЛЬКО для этого объекта (ближайший слабый аналог - это приватное поле в классе). И переменная `i` сохраняется до тех пор, пока существует сам объект. Вот тут круто про замыкания ruclips.net/video/kizGhzeNE64/видео.html
Про методы массива сделай пожалуйста видео.
Max Shmidt хорошо, следующим видео
@@NextgenSocialReptile Thanks a lot!
@@NextgenSocialReptile Жду с нетерпением. Следующего видео.
нихера не понял, но было интересно
"Ничего не понял, но очень интересно"©, а если серьёзно - так и не понял где и зачем их использовать, ну кроме redux-saga и то только потому что так написано у них в доках =_=
я понял, как можно усложнить цикл for ещё одним способом. не понял зачем.
или это только для того, чтоб вернуть набор объектов из функции и работать с ним в for of? пойду погуглю.
Подскажите пожалуйста как вы сделали такую подсветку ? Я про то, что скобки разных функций и блоков отображаются по разному
Глянь на канале курс по vscode
@@VladilenMinin хорошо. спасибо
Можно ли как в Python сгенерировать например двумерный массив? В Py одной строкой:
arr = [0 for j in range(3)] for i in range(3)]
Много кода получается.
function gen() {
let arr1 = [];
for (let i = 0; i < 3; i++) {
let arr2 = [];
for (let j = 0; j < 3; j++) {
arr2.push(0);
}
arr1.push(arr2);
}
return arr1;
}
const ar = gen();
console.log(ar);
const matrix = Array(3).fill([0, 0, 0])
Спасибо за крутые уроки. Вождение вопрос по генераторам.
Я правильно понимаю, что список значений они генерируют инициализации. Допустим, я хочу получать из базы последовательно некоторые записи, пока они не закончатся. Генератор в этом случае не получится использовать?
Кайф.
Привет спасибо за видеоролики. Хотел спросить будет ли видос про декораторы?
Почему в самодельном гинераторе вывод value начинается с 1? а не с нуля как в оригинале?
++I замените на i++, если нужно с 0
Спасибо! Круто :)
Здравствуйте, что за тема в vs code? разноцветные фигурные скобки - топ! Хочу такие же)
Darkula
Pair bracket colorizer
Остался только один вопрос: а нафига нужны генераторы? Даже не могу придумать реальный пример для использования.
Ну тут суть в том что, вызывающая сторона (та что функцию вызывает) не имеет контроля над функцией и получается так что функция отработала, вернула результат и все. А с помощью генератора та сторона что вызывает его получает полный контроль над функцией, то есть она может контролировать каждый этап выполнения) Ну крутая же штука )
@@warm3840 да, в ней есть определённый потенциал, осталось найти применение
*Л. а. й. к.*
А на практике где используются генераторы?
Как понимаю, Async/await это генераторы+промисы
Для пользования некоторыми библиотеками. Redux Saga построена на генераторах к примеру. Это промежуточный слой между Iterator и Async/Await. На медиуме есть статья "Зачем они нужны в JavaScript? Symbol, Iterator, Generator" Там на пальцах описано что есть что и для чего.
При итерации большого пула.
не раскрыт функционал генератора когда передавая значения в метод next мы можем внутрь генератора пробросить какое то значение
👍👍👍👍😊
думал что тупой но почитал коменты и понял что не я один не понял нахрена это надо....
еще одна возможность JS которая будет использована мной примерно никогда :D
Не пойму, почему ты объявляешь константу, если переменная динамична ?
Почему называет константу переменной? То-же интересно. Может дело привычки...
на самом деле let - если будет переопределение переменной
const можно менять массив или объект , но не переопределять переменную
Итераторы - асинхронность для тех кто не любит себя?)
Интересно, но пока что как-то бесполезно в практике(
Раньше до async await пользовались генератора и, сейчас генераторы могут быть полезны разве что в php ИМХО
+
🙏🏻
Можно ДЗ под каждым видео?
Точки с запятыми после выражений ставить нужно.
не обязательно... ES6+ поддерживает и такую запись. НО у меня вопрос, почему вы пишите это профессионалу? если это шутка, то прошу прощения. удачи
@@user-lc3gn8qr5t раздражает их отсутствие.
@@Fakeusert раздражает ваш коммент
@@Fakeusert если они не обязательны то нахрена их ставить, в котлине вот умные, сразу избавились от них, они максимум нужны когда код в чистом виде интерпритируеться в сжатом виде, тогда лучше конечно ставить, а то ошибки будут
К сожалению не понятно
Достали на самом деле с примерами в которых циферки и буковки
10:13
С таким количеством вложенности тебе надо не программирование преподавать, а курьером работать.
Спасибо!
+
+