Must read для JavaScript программистов!
От: vba66a  
Дата: 07.02.18 18:11
Оценка: :)
.. ради одной этой фразы:

"не пытайтесь йелдить в колбеке"

© https://medium.com/@vkozulya/%D0%BD%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BE-%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0%D1%85-610a6e904b4e
Отредактировано 07.02.2018 18:15 vba66a . Предыдущая версия .
Re: Must read для JavaScript программистов!
От: CreatorCray  
Дата: 07.02.18 18:18
Оценка:
Здравствуйте, vba66a, Вы писали:

V>

"не пытайтесь йелдить в колбеке"

Дада, эти наркоманы собираются кучкой и йелдят друг дружку в колбеки!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Must read для JavaScript программистов!
От: Hobbes Россия  
Дата: 08.02.18 06:21
Оценка: +1 :)
Здравствуйте, vba66a, Вы писали:

V>© https://medium.com/@vkozulya/%D0%BD%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BE-%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0%D1%85-610a6e904b4e


Почитал и попытался осмыслить. Это что за наркомания?

там переданное в оператор значение отправится наружу внутри специальной структуры, где будет value (наше значение) и done (жив ли еще генератор).

Не хочу структуру, хочу любые типы, хочу генератор в map, например, использовать. Что мне с этой структурой делать, лямбду для извлечения значения писать?

Завершение работы генератора отмечает return. В принципе, его можно не писать, но тогда последнийvalue вернется с undefined.

Приехали, конец. То есть я заранее в генераторе должен предусмотреть, какое значение вернётся последним, и написать для этого особую строчку с return?

Когда весь код в теле функции будет выполнен, done станет true

А если я не напишу return, когда done станет true? Когда вернётся первый undefined? То есть если генератор написан так, то значение с флагом done надо учитывать, а если эдак, то не надо учитывать. Приехали, конец. Или надо смотреть undefined или нет? Тогда зачем done нужен?

// 0 is lost
const received = yield 1;

В чём смысл такого синтаксиса? Значение получить можем, но сделать с ним ничего не можем.

Значения больше не нужно вытаскивать из поля value, но return при выдаче не учитывается.

Приехали, конец. Там учитываем, тут не учитываем, не программирование, а хождение по коровьему пастбищу.
javascript говно
Re[2]: Must read для JavaScript программистов!
От: AlexRK  
Дата: 08.02.18 08:32
Оценка:
Здравствуйте, CreatorCray, Вы писали:

V>>

"не пытайтесь йелдить в колбеке"

CC>Дада, эти наркоманы собираются кучкой и йелдят друг дружку в колбеки!


Re[2]: Must read для JavaScript программистов!
От: Кодт Россия  
Дата: 08.02.18 09:53
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Почитал и попытался осмыслить. Это что за наркомания?


Это генераторы, товарищ. Позаимствованы в яваскрипт из питона.

H>

H>там переданное в оператор значение отправится наружу внутри специальной структуры, где будет value (наше значение) и done (жив ли еще генератор).

H>Не хочу структуру, хочу любые типы, хочу генератор в map, например, использовать. Что мне с этой структурой делать, лямбду для извлечения значения писать?

function* imap(f, xs) {
  for (var x of xs) yield f(x);
}


H>

H>Завершение работы генератора отмечает return. В принципе, его можно не писать, но тогда последнийvalue вернется с undefined.

H>Приехали, конец. То есть я заранее в генераторе должен предусмотреть, какое значение вернётся последним, и написать для этого особую строчку с return?

Необязательно.
function* g() {
  yield 1;
  yield 2;
  return 3;
}
writeln([...g()]); // [1,2] - отсечка произошла по done

var i = g();
function show(t) { return [t.value, t.done]; }

writeln(show(i.next())); // 1,false
writeln(show(i.next())); // 2,false
writeln(show(i.next())); // 3,true         - для протокола yield-next можно получить последний содержательный ответ
writeln(show(i.next())); // undefined,true - дальнейшие ответы бессодержательные, генератор упёрся в конец


H>

H>Когда весь код в теле функции будет выполнен, done станет true

H>А если я не напишу return, когда done станет true? Когда вернётся первый undefined? То есть если генератор написан так, то значение с флагом done надо учитывать, а если эдак, то не надо учитывать. Приехали, конец. Или надо смотреть undefined или нет? Тогда зачем done нужен?

Нужен для отсечки в циклах и конструкторах списков. Очевидно же.

H>

H>// 0 is lost
H>const received = yield 1;

H>В чём смысл такого синтаксиса? Значение получить можем, но сделать с ним ничего не можем.

Для создания сопрограмм. Генераторы — это однопоточные сопрограммы с состоянием.

H>

H>Значения больше не нужно вытаскивать из поля value, но return при выдаче не учитывается.

H>Приехали, конец. Там учитываем, тут не учитываем, не программирование, а хождение по коровьему пастбищу.

Никто не заставляет. Нормальные люди используют генераторы, итераторы и обычные списки в циклах и конструкторах списков, но можно и закопаться.
Просто статья написана немножко мутно.
Перекуём баги на фичи!
Re[2]: Must read для JavaScript программистов!
От: anton_t Россия  
Дата: 08.02.18 09:55
Оценка:
Здравствуйте, Hobbes, Вы писали:

>...


Если не читать неграмотных блоггеров и не хейтить javascript, то в генераторах все логично. Тут подробнее https://learn.javascript.ru/generator .
Re[3]: Must read для JavaScript программистов!
От: Hobbes Россия  
Дата: 08.02.18 10:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Необязательно.

К>
К>function* g() {
К>  yield 1;
К>  yield 2;
К>  return 3;
К>}
К>writeln([...g()]); // [1,2] - отсечка произошла по done

К>var i = g();
К>function show(t) { return [t.value, t.done]; }

К>writeln(show(i.next())); // 1,false
К>writeln(show(i.next())); // 2,false
К>writeln(show(i.next())); // 3,true         - для протокола yield-next можно получить последний содержательный ответ
К>writeln(show(i.next())); // undefined,true - дальнейшие ответы бессодержательные, генератор упёрся в конец
К>


Всё, я понял. return в генераторе это не аналог yield и прекращения работы, а аналог StopIteration, но с некоторым значением.
Re[3]: Must read для JavaScript программистов!
От: pugv Россия  
Дата: 12.02.18 11:15
Оценка:
Здравствуйте, Кодт, Вы писали:

К> Просто статья написана немножко мутно.


Ну так статья написана Козулей

Интернет-деятелем, программистом, публицистом, лектором, консультантом-мемологом

Далеко нам до его уровня, в общем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.