• [^] # Re: Chouette

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 3.

    Est-ce qu'il y a des cas qu'on ne peut que traiter avec un générateur?

    je n'en ai pas en tête.

    Mais, dans ton cas où tu implémentes ta fonction forEach, syntaxiquement, ce n'est pas reconnu par JS comme étant un générateur, quand bien même ton forEach serait "lazy". Ton forEach n'est pas une manière standard de faire un Iterateur.

    D'ailleurs avec ton implementation de forEach pour les nombres premiers, je ne suis pas vraiment fan. Par exemple, je veux récupérer les 10 premiers nombres premiers. Je suis obligé de faire

    var primes = createPrimes();
    var i = 10;
    var sum = 0;
    try {
     primes.forEach(function (np){
     // do something with np
     sum += np;
     // finished ?
     if (--i == 0) {
     throw new Error("stop")
     }
     });
    }
    catch(e){
     // ne pas oublier le catch, sinon...
    }
    

    Alors que si createPrimes() retournait un iterateur ou génerateur

    var primes = createPrimes();
    var i=0;
    var sum = 0;
    var np = primes.next();
    while ( --i>0 && !np.done){
     // do something with np
     sum += np.value;
     // next...
     np = primes.next();
    }
    

    Pour moi la solution avec iterateur/générateur me semble plus compacte et lisible...