Un Generator:

  • est marqué avec *
  • yield permet de retourner un résultat « intermédiaire »
  • retourne un Iterator 
    • a une fonction next qui retourne la value + done (true ou false) ou seulement done:true

Exemple:

function* gen() {
    yield 'a';
    yield 'b';
    yield 'c';
    return 'end';
}

let it = gen();

console.log(it.next().value); // a
console.log(it.next().value); // b
console.log(it.next().value); // c 
console.log(it.next().value); // end
console.log(it.next().value); // undefined

Avec une boucle

 function* gen(array) {
    var index = 0;
    var length = array.length;
    while (index < length) {
        yield array[index++];
    }
}

let it = gen(['a', 'b', 'c']);

console.log(it.next().value); // a
console.log(it.next().value); // b
console.log(it.next().value); // c 

Iterator

Il est possible de créer ses propres iterators

function makeIterator(array) {
    var index = 0;
    var length = array.length;

    return {
        next: function () {
            return index < length ?
                { value: array[index++], done: false } :
                { done: true };
        }
    }
}


var it = makeIterator(['a', 'b', 'c']);
console.log(it.next().value); // a
console.log(it.next().value); // b
console.log(it.next().value); // c
console.log(it.next().done);  // true

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *