У мене теж було те саме питання і я прийшов сюди. Прочитавши публікації та коментарі, я відчув, що використання генератора у функції стрілки здається невиразним:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
Це може бути основною причиною того, що вони не застосували генератор стосовно функції стрілки.
Але, якби я був одним із них, я міг би подумати так:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Це відчувається так, як ми маємо асинхронну функцію:
const asyncFunction = async () => ... // pretty cool
Тому що при нормальній функції ключове слово async існує, тому функція стрілки використовує його - async () =>
швидше за все, здається async function()
.
Але, немає ключових слів , як gen
і generator
на жаль стрілка функція не використовує його.
Щоб зробити висновок:
Навіть якщо вони хочуть реалізувати генератор у функції стрілки, я думаю, що їм потрібно переосмислити синтаксис генератора в ядрі js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
І це буде великою помилкою. Отже, утримувати функцію стрілки від генератора, це досить здорово.
Після коментаря @Bergi :
Ні. Функції стрілок повинні бути легкими (та не мають, наприклад, прототипу) і часто однолінійними, тоді як генератори - навпаки.
Я скажу, що ціль генератора, який слід використовувати, - це запуск-стоп-біг, і тому я не думаю, що нам потрібно дбати про прототип, про лексичне це і т.д.
function*
(ключове слово функції з подальшим зірочкою) визначає функцію генератора."