Ben de aynı soruyu soruyordum ve buraya geldim. Mesajları ve yorumları okuduktan sonra, bir ok fonksiyonunda jeneratör kullanmanın belirsiz olduğunu hissettim:
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
Bu, ok fonksiyonu ile ilgili olarak jeneratörü uygulamamalarının en büyük nedeni olabilir.
Ama onlardan biri olsaydım şöyle düşünebilirdim:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Bu, asenkron fonksiyonumuz varmış gibi geliyor:
const asyncFunction = async () => ... // pretty cool
Çünkü, normal işlevle async anahtar sözcüğü var, bu nedenle ok işlevi onu kullanıyor - async () =>
büyük olasılıkla görünecek async function()
.
Ancak, gen
veya gibi bir anahtar kelime yoktur generator
ve ne yazık ki ok işlevi bunu kullanmıyor.
Sonuç olarak:
Jeneratörü ok fonksiyonunda uygulamak isteseler bile, çekirdek js'deki jeneratör sözdizimini yeniden düşünmeleri gerektiğini düşünüyorum:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Ve bu büyük bir gaf olacak. Yani, ok fonksiyonunu jeneratörden uzak tutmak oldukça havalı.
@Bergi yorumu takip ediliyor :
Hayır. Ok işlevlerinin hafif olması (ve örneğin bir .prototipinin olmaması) ve genellikle tek katmanlı olması gerekirken, jeneratörler hemen hemen tam tersidir.
Jeneratör kullanım amacının run-stop-run olduğunu söyleyeceğim ve bu yüzden prototip, sözcüksel vb.
function*
Msgstr " İfade (yıldız işareti ile izlenen fonksiyon anahtar sözcüğü) bir jeneratör işlevi tanımlar."