• [^] # Re: Chouette

    Posté par (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2. Dernière modification le 29 juin 2015 à 14:51.

    Pour des implémentations fictives d'un objet représentant un intervalle, qu'est-ce que c'est l'avantage de dire

    var sequence = createSequence(1,10);
    for(let i of sequence(0 {
     print(i);
    }
    

    par rapport à

    var sequence = createSequence(1,0);
    sequence.forEach(print);
    

    Si le traitement est plus compliqué on peut remplacer le print du deuxième exemple par une fonction anonyme. La deuxième forme est rendue possible par le langage depuis longtemps (toujours?) et je ne vois pas trop l'intérêt d'étendre le langage pour proposer de faire de façon compliquée ce qu'on pouvait faire simplement avant.

    En plus l'intérêt de la deuxième forme est qu'on peut implémenter facilement le forEach pour éviter d'avoir un état mutable dans sequence ce qui permet de partager la valeur entre plusieurs threads sans se casser la tête. La forme avec yield n'a pas cet avantage.

    La forme avec yield a peut-être des avantages sur le forEach mais ce n'est pas celui que tu dis. Rien n'interdit à un objet de publier des fonctions forEach ou la forme plus générale reduce pour permettre à tout le monde d'itérer sur la propriétés de l'objet de façon standardisée. Ou de générer les éléments à la demande.

    Tout ce que tu dis n'est pas spécifique au yield et est déjà rendu possible par les fonctions d'ordre supérieur à la reduce et forEach.