Pour donner un exemple concret de définition d'un objet itérable au moyen d'un forEach j'ai défini un objet primes qui énumère les nombres premiers (SpiderMonkey / js) – de la façon la plus naïve possible:
var createPrimes = function(spec, _my) {
var that = {};
var my = _my || {};
my.knownPrimes = [ 2 ];
my.upperBound = 2;
var isDivisible = function(n) {
return my.knownPrimes.some(function(k) {
return (n % k) === 0;
});
};
var findPrimesUpTo = function(n) {
for(var i = my.upperBound; i <=n; ++i) {
if(! isDivisible(i)) {
my.knownPrimes.push(i);
}
}
my.upperBound = n;
}
var isPrime = function(n) {
findPrimesUpTo(n);
return my.knownPrimes.some(function(k) {
return k === n;
});
}
that.forEach = function(callback) {
var i = 2;
while(true) {
if(isPrime(i)) {
callback(i);
};
++ i
};
};
return that;
};
var primes = createPrimes();
primes.forEach(print);
Cela ne s'arrête jamais, mais si le code utilisant l'énumération en a marre, il peut lancer une exception par exemple. On peut partager le même énumérateur entre plusieurs threads dans node.js par exemple. Qu'est-ce qu'apporte une réécriture avec yield dans cet exemple? Et dans d'autres exemples?
[^] # Re: Chouette
Posté par Michaël (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.
Pour donner un exemple concret de définition d'un objet itérable au moyen d'un
forEachj'ai défini un objetprimesqui énumère les nombres premiers (SpiderMonkey / js) – de la façon la plus naïve possible:Cela ne s'arrête jamais, mais si le code utilisant l'énumération en a marre, il peut lancer une exception par exemple. On peut partager le même énumérateur entre plusieurs threads dans node.js par exemple. Qu'est-ce qu'apporte une réécriture avec yield dans cet exemple? Et dans d'autres exemples?