mozilla
Vos résultats de recherche

    Generator

    Cette fonction, proposition pour ECMAScript 6 (Harmony), est expérimentale
    Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
    Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

    Résumé

    L'objet Generator est renvoyé par une fonction génératrice, c'est à la fois un itérateur et un itérable.

    Syntaxe

    function* gen() { 
      yield 1;
      yield 2;
      yield 3;
    }
    
    var g = gen(); // "Generator { }"

    Méthods

    Generator.prototype.next()
    Renvoie une valeur générée par l'expression yield.
    Generator.prototype.return()
    Renvoie la valeur donnée et termine le générateur.
    Generator.prototype.throw()
    Lève une exception dans un générateur.

    Exemple

    Un itérateur infini

    function* idMaker(){
        var index = 0;
        while(true)
            yield index++;
    }
    
    var gen = idMaker(); // "Generator { }"
    
    console.log(gen.next().value); // 0
    console.log(gen.next().value); // 1
    console.log(gen.next().value); // 2
    // ...

    Générateurs historiques

    Firefox (SpiderMonkey) implémente également une version antérieure pour les générateurs avec JavaScript 1.7. Pour cette syntaxe, il n'y a pas besoin d'utiliser l'astérisque dans la déclaration de la fonction, il suffit d'utiliser le mot-clé yield dans le corps de la fonction. Les générateurs historiques sont une fonctionnalité dépréciée et seront supprimés à l'avenir (bug 1083482), il est fortement déconseillé de les utiliser.

    Méthodes pour les générateurs historiques

    Generator.prototype.next()
    Renvoie une valeur générée par l'expression yield. Cette méthode correspond à next() pour les générateurs ES6.
    Generator.prototype.close()
    Clôture le générateur, tout appel ultérieur à next() renverra une exception StopIteration. Cela correspond à la méthode return() pour les générateurs ES6.
    Generator.prototype.send()
    Utilisée pour envoyer une valeur à un générateur. La valeur est renvoyée avec une expression yield et renvoie une valeur générée par la prochaine expression yield. send(x) correspond à next(x) pour les générateurs ES6.
    Generator.prototype.throw()
    Lève une exception au sein d'un générateur. Cela correspond à la méthode throw() pour les générateurs ES6.

    Exemple utilisant un générateur historique

    function fibonacci() {
      var a = yield 1;
      yield a * 2;
    }
    
    var it = fibonacci();
    console.log(it);          // "Generator {  }"
    console.log(it.next());   // 1
    console.log(it.send(10)); // 20
    console.log(it.close());  // undefined
    console.log(it.next());   // throws StopIteration (le générateur est clôturé)
    

    Spécifications

    Spécification Statut Commentaires
    ECMAScript 6 (ECMA-262)
    La définition de 'Generator objects' dans cette spécification.
    En cours de validation comme recommandation Définition initiale.

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple Pas de support (Oui) Pas de support Pas de support Pas de support
    Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple Pas de support Pas de support (Oui) Pas de support Pas de support Pas de support

    Voir aussi

    Générateurs historiques

    Générateurs ES6

    Étiquettes et contributeurs liés au document

    Contributors to this page: SphinxKnight
    Dernière mise à jour par : SphinxKnight,