JS - Chapitre 13 - Generators Flashcards
Qu’est-ce qu’un générator
C’est une méthode qui renvoi la valeur suivante dans une sequence à chaque fois qu’on l’appelle
Exemple de generator infinie
function range() {
let count = 0;
return function() {
const result = count;
count += 1;
return result;
}
}
utilisation
const nextNumber = range();
console.log(nextNumber());
generator finite
si on fait un range entre start et end à la fin il renvoie undefined
pour créer un tableau à partir d’un génerateur (exemple de toArray sur range)
function toArray(generate) {
let arr = [];
let value = generate();
while (value != undefined) {
arr = […arr, value];
value = generated();
}
return arr;
}
exemple d’une méthode forEach curried pour avoir un generateur et une méthode appliqué à chaque
function forEach(callback) {
return function(generate) {
let value = generate();
while (value != undefined) {
callback(value);
value = generate();
}
}
}
Utilisation:
forEach(log)(range(1,4));
méthode take qui prend le n éléments d’une séquence
function take(n) {
return function (generate) {
let count = 0;
return function() {
if (count < n) {
count += 1;
return generate();
}
}
}
}
utilisation take(n)(sequence)
Exemple d’utilisation de pipe pour prendre 3 valeurs sur un range infini
pipe(
take(3),
forEach(console.log)
)(range());
Exemple du generator de la suite de Fibonacci
function fibonacci() {
let a = 0;
let b = 1;
return function() {
const aResult = a;
a = b;
b = aResult + b;
return aResult;
};
}
Utilisation:
pipe(
take(5),
forEach(console.log)
)(fibonacci());