Académique Documents
Professionnel Documents
Culture Documents
CHAPITRE 10 :
G ÉN ÉRATEUR, YIELD et NEXT :
Illustration et comparaison :
I. VERSION STRING
</script>
<script>
function* repSces(obj) {
console.log("Avant yield");
yield obj;
}
let it = repSces(
console.log("Génération en cours"));
console.log("Appel à .next()");
console.log(`it.next()= `, it.next());
</script>
console.log([...iterable])
</script>
iterable[Symbol.iterator] = function* () {
yield "Date() = " + Date();
yield "Date.now() = " + Date.now();
yield "Math.PI = " + Math.PI;
yield "Math.E = " + Math.E;
};
<script>
function* repSces(obj) {
const couples = Object.getOwnPropertyNames(obj);
// ou
// const couples = Reflect.ownKeys(obj);
let c=0;
}
console.log(`${"=".repeat(20)}`);
}
</script>
const it = {
*[Symbol.iterator]() {
for (let k of m) yield c+=2;
}
}
let cptr=0;
for (let v of combo)
t += (++cptr).toString().padStart(2,'.') + ") " +
v+' | ';
console.log(t);
</script>
let cptr=0;
for (let v of combo)
t += (++cptr).toString()
.padStart(2,String
.fromCharCode(183)) +
") " +
v+' | ';
console.log(t);
</script>
let cptr=0;
for (let v of combo)
t += (++cptr).toString()
.padStart(2,String
.fromCharCode(183)) +
") " +
v+' | ';
console.log(t);
</script>
Déclaration de la fonction-génératrice :
Exemple :
const it = fGenerator();
// Déf itérateur par appel au générateur
cl(it.next().value); // 9
cl(it.next().value); // 10
var it = numeroter();
console.log(it.next().value); // 0
console.log(it.next().value); // 1
console.log(it.next().value); // 2
console.log(it.next().value); // 1er next Après la boucle
console.log(it.next().value); // undefined
console.log(it.next().value); // undefined
</script>
const nc = [
"I = OLFACTIF, Se", "II = OPTIQUE, SDe",
"III = OCULO-MOTEUR COMMUN (innerve tous les "+
"autres muscles extrinsèques, la musculature "+
"intrinsèque [muscle ciliaire {accommodation} "+
"et sphincter de l'iris], et le releveur de "+
"paupière supérieure), Mo",
"IV = PATHÉTIQUE (=trochléaire. Innerve le "+
"grand oblique), Mo", "V = TRIJUMEAU, Mi",
Itérateur–Générateur–Itérables -18/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
"VI = OCULO-MOTEUR EXTERNE (=abducens. "+
"Innerve le droit externe), Mo",
"VII = FACIAL (Mi)",
"VIII = VESTIBULO-COCHLÉAIRE, Se",
"IX = GLOSSO-PHARYNGIEN, Mi",
"X = PNEUMOGASTRIQUE (=Vague), Mi",
"XI = SPINAL (=accessoire), Mi",
"XII = GRAND HYPOGLOSSE, Mi."
];
var it = numeroter();
do{
var c = it.next().value;
console.log(`* ${c+1}è paire => ${nc[c]}`);
}
while(nc[c]!=="XII = GRAND HYPOGLOSSE, Mi.");
</script>
var it = numeroter();
console.log(it.next().value); // 0
console.log(it.next().value); // 10
console.log(it.next().value); // 20
console.log(it.next().value); // 30
console.log(it.next().value); // undefined
</script>
var it = numeroter();
console.log(it.next().value); // false
console.log(it.next().value); // true
console.log(it.next().value); // false
console.log(it.next().value); // true
console.log(it.next().value); // undefined
</script>
ard=[
"Conjonctivite",
"Myopie",
"Rétinoblastome",
"Perforation"
];
var it = numeroter();
console.log(it.next().value); // sécrétions
console.log(it.next().value); // lunettes
console.log(it.next().value); // masse
console.log(it.next().value); // herniation
console.log(it.next().value); // undefined
console.log(it.next().value); // undefined
</script>
var it = numeroter();
const diag = {
Conjonctivite:"sécrétions",
Myopie:"lunettes",
Rétinoblastome:"masse",
Perforation:"herniation"
};
let c;
c = it.next().value;
console.log(Object.entries(diag)[c][0],
Object.entries(diag)[c][1]);
// Conjonctivite sécrétions
c = it.next().value;
console.log(Object.entries(diag)[c][0],
Object.entries(diag)[c][1]);
// Myopie lunettes
c = it.next().value;
console.log(Object.entries(diag)[c][0],
Object.entries(diag)[c][1]);
// Rétinoblastome masse
c = it.next().value;
console.log(r);
// Object {
// value: "Valeur retournée par yield",
// done: false
// }
</script>
console.log(Object.getOwnPropertyDescriptors(r))
console.log(Object.getOwnPropertyNames(r))
</script>
ard=[
"Conjonctivite",
"Myopie",
"Rétinoblastome",
let r;
r=gen.next();
console.log(r.value + " " + r.done); // sécrétions false
r=gen.next();
console.log(r.value + " " + r.done); // lunettes false
r=gen.next();
console.log(r.value + " " + r.done); // masse false
r=gen.next();
console.log(r.value + " " + r.done); // herniation false
r=gen.next();
console.log(r.value + " " + r.done); // undefined false
r=gen.next();
console.log(r.value + " " + r.done); // undefined false
</script>
1er exemple :
2e exemple :
let r;
r=gen.next();
console.log(r.value+" "+r.done); // 0 false
r=gen.next();
console.log(r.value+" "+r.done); // 1 false
r=gen.next();
console.log(r.value+" "+r.done); // 2 false
r=gen.next();
console.log(r.value+" "+r.done);
// 1er next Après la boucle
Itérateur–Générateur–Itérables -29/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
// undefined
r=gen.next();
console.log(r.value+" "+r.done); // undefined true
r=gen.next();
console.log(r.value+" "+r.done); // undefined true
// 0 false test.html:21:1
// 1 false test.html:23:1
// 2 false test.html:25:1
// 1er next Après la boucle test.html:10:3
// undefined true test.html:27:1
// undefined true test.html:29:1
// undefined true test.html:31:1
</script>
ard=[
"Conjonctivite",
"Myopie",
"Rétinoblastome",
"Perforation"
];
let r;
r=gen.next();
console.log(r.value + " " + r.done); // sécrétions false
r=gen.next();
console.log(r.value + " " + r.done); // lunettes false
r=gen.next();
console.log(r.value + " " + r.done); // masse false
r=gen.next();
console.log(r.value + " " + r.done); // undefined true
r=gen.next();
console.log(r.value + " " + r.done); // undefined true
r=gen.next();
console.log(r.value + " " + r.done); // undefined true
console.log("Exécution du 2e yield")
yield g;
console.log("Exécution du 3e yield")
yield g + v;
console.log("Exécution du 4e yield")
yield p + v;
console.log("Exécution du 5e yield")
yield g * p + v;
}
v = 15;
console.log(gen.next().value); // 5
v = 25;
console.log(gen.next().value); // 30
v = 30;
console.log(gen.next().value); // 40
v = 40;
console.log(gen.next().value); // 90
console.log(gen.next().done) // true
// RÉSULTATS
// true test.html:38:3
</script>
Exécution :
console.log("^^^^^^^",yield "Initio");
// Exécute d'abord yield (donc rentre vers le next
appelant),
// et donc interrompt et quitte le générateur sans le
fermer,
// et donc le console.log() ci-dessus
// sera exécuté seulement au prochain .next(), mais
// pas avec la valeur en cours de yield ("Initio"), mais
// ave l'argument éventuel du .next() suivant ("2.
Keliol...").
// Voir l'ordre d'exécution dans l'affichage de la
console.
r=gen.next();
console.log("=>",r,r.value,r.done," <=");
console.log(yield);
pour afficher :
pour afficher :
en affichant
return 45;
qui affiche :
function* gen(i){
yield i; // Retourne 15 pour *A* seulement
yield* autreGen(i);
// délègue à yield* pour *B*, *C* et *D*
// (puisque 3 yield ds autreGen),
// avec i=15 (argument de yield*)
Itérateur–Générateur–Itérables -41/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
yield i * 6;
// Suite des yield dans gen, donc retourne 15*6 pour *E*
yield i * 7;
// Retourne 15*7=105 pour *F*
}
r=gen.next();
console.log("A**gen ",r.value,r.done); // A**gen 15
false
r=gen.next();
console.log("B**gen ",r.value,r.done); // B**gen 30
false
r=gen.next();
console.log("C**gen ",r.value,r.done); // C**gen 45
false
r=gen.next();
console.log("D**gen ",r.value,r.done); // D**gen 60
false
r=gen.next();
console.log("E**gen ",r.value,r.done); // E**gen 90
false
r=gen.next();
console.log("F**gen ",r.value,r.done); // F**gen 105
false
r=gen.next();
console.log("F**gen ",r.value,r.done); // F**gen
undefined true
Application :
yield String(++n).padStart(2,'.')+
". pds=" + String(ech["p"]).padStart(3,' ')
+
" kg , taille=" +
String(ech["t"]).padStart(4,' ')+
" cm , imc=" + imc.toPrecision(4) + "
kg²/cm" ;
}
}
Exéccution :
Exécution :
1. 2 test.html:12:3
2. 4 test.html:12:3
3. 8 test.html:12:3
4. 16 test.html:12:3
5. 32 test.html:12:3
6. 64 test.html:12:3
7. 128 test.html:12:3
8. 256 test.html:12:3
9. 512 test.html:12:3
10. 1024 test.html:12:3
https://gist.github.com/kavitshah8/d8ba19d09334d8e08a
1f209fdbacb597/raw/d96f9bab8f5fbbf5b4d9227f48c73a6
848525524/curry2.js
for(let k=0;k<=10;k++){
console.log(2,"^",k,"=", pow2x(k) )
}
console.log("")
Itérateur–Générateur–Itérables -45/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
var p=1;
for(let k=0;k<=10;k++){
var res=compound(pow2x)(k)
console.log(p,"^",2,"=", compound(pow2x)(k) )
p=res
}
// 2 ^ 0 = 1 test.html:12:23
// 2 ^ 1 = 2 test.html:12:23
// 2 ^ 2 = 4 test.html:12:23
// 2 ^ 3 = 8 test.html:12:23
// 2 ^ 4 = 16 test.html:12:23
// 2 ^ 5 = 32 test.html:12:23
// 2 ^ 6 = 64 test.html:12:23
// 2 ^ 7 = 128 test.html:12:23
// 2 ^ 8 = 256 test.html:12:23
// 2 ^ 9 = 512 test.html:12:23
// 2 ^ 10 = 1024 test.html:12:23
// 1 ^ 2 = 2 test.html:18:3
// 2 ^ 2 = 4 test.html:18:3
// 4 ^ 2 = 16 test.html:18:3
// 16 ^ 2 = 256 test.html:18:3
// 256 ^ 2 = 65536 test.html:18:3
// 65536 ^ 2 = 4294967296 test.html:18:3
// 4294967296 ^ 2 = 18446744073709552000
// 18446744073709552000 ^ 2 = 3.402823669209385e+38
// 3.402823669209385e+38 ^ 2 = 1.157920892373162e+77
// 1.157920892373162e+77 ^ 2 = 1.3407807929942597e+154
// 1.3407807929942597e+154 ^ 2 = Infinity
</script>
Et
for(let k=0;k<=10;k++){
console.log(2,"^",k," = ", pow2x(k) )
}
console.log("")
var p=1;
for(let k=0;k<=10;k++){
var res=compound(pow2x)(k)(2)
console.log(p,"^",2,"^",2,"=", compound(pow2x)(k)(2) )
p=Math.sqrt(res)
}
// 2 ^ 0 = 1
// 2 ^ 1 = 2
// 2 ^ 2 = 4
// 2 ^ 3 = 8
// 2 ^ 4 = 16
// 2 ^ 5 = 32
// 2 ^ 6 = 64
// 2 ^ 7 = 128
// 2 ^ 8 = 256
// 2 ^ 9 = 512
// 2 ^ 10 = 1024
// 1 ^ 2 ^ 2 = 4
// 2 ^ 2 ^ 2 = 16
// 4 ^ 2 ^ 2 = 256
// 16 ^ 2 ^ 2 = 65536
// 256 ^ 2 ^ 2 = 4294967296
// 65536 ^ 2 ^ 2 = 18446744073709552000
// 4294967296 ^ 2 ^ 2 = 3.402823669209385e+38
// 18446744073709552000 ^ 2 ^ 2 = 1.157920892373162e+77
// 3.402823669209385e+38 ^ 2 ^ 2 = 1.3407807929942597e+154
// 1.157920892373162e+77 ^ 2 ^ 2 = Infinity
CHAPITRE 11 :
Exemple d’itération :
const it = iterable[Symbol.iterator]();
let tot="";
while (true) {
const res = it.next();
if (res.done) { break; }
0 = 2^-Infinity | 1 = 2^0 | 2 = 2^ 1 |
4 = 2^2 | 8 = 2^ 3 | 16 = 2^ 4 | 32 = 2^ 5 |
64 = 2^ 6 | 128 = 2^ 7 | 256 = 2^ 8 | 512 = 2^ 9 |
1024 = 2^10 | 2048 = 2^11 | 4096 = 2^12 | 8192 = 2^13 |
16384 = 2^14 | 32768 = 2^15 | 65536 = 2^16 |
// ITÉRATIONS D'ÉNUMÉRABLES //
Ob-
ject.entries(obj).forEach(([cle,val])=>console.log(cle+"
<-> "+val));
// 1 <-> Un
// obj <-> [object Object]
// L <-> A
// deux <-> 2
// array <-> texte,9,[object Object]
Object.entries(obj).forEach(([cle]) =>
console.log(cle));
// 1
// obj
// L
// deux
// array
// Object.entries(obj) . FOREACH(([VAL])
// object
//
console.log("---","***","---");
Object.entries(obj).forEach(([,val]) =>
console.log(val));
// Un
// Object { }
// A
// 2
// Array [ "texte", 9, {…} ]
// Object.VALUES(obj)
// Object.ENTRIES(obj.array) . FOREACH(([idx])
// array
//
console.log("---","***","---");
Object.entries(obj.array).forEach(([idx]) =>
console.log(idx+" -> "+obj.array[idx]));
// 0 -> texte
// 1 -> 9
// 2 -> [object Object]
// Object.values(obj.array)
// array
//
console.log("---","***","---");
console.log(Object.values(obj.array));
// Array [ "texte", 9, {…} ]
// FOR (var i IN s)
// String
//
console.log("---","***","---");
let s="Diasol";
for (var i in s) {
console.log(i+" -> "+s[i]);
// APPLICATIONS PRATIQUES
// HASOWNPROPERTY(prop)
//
console.log("---","***","---");
let triangle = {a: 1, b: 2, c: 3};
let epaisseur = {ep:"epais"};
function ColoredTriangle() {
this.color = 'red';
}
console.log("ColoredTriangle.aimepar =
"+ColoredTriangle.aimepar);
// ColoredTriangle.aimepar = 15
console.log("obj.aimepar = "+obj.aimepar);
// obj.aimepar = undefined
console.log("---","***","---");
console.log(Object.getOwnPropertyNames(obj));
// Array [ "color", "brillant" ]
if (obj.hasOwnProperty(prop)) {
console.log(`*** OWN PROP : obj.${prop} = $
{obj[prop]}`);
}
// *** OWN PROP : obj.color = red
// *** OWN PROP : obj.brillant = true
}
console.log("---","***","---");
console.log(Object.getOwnPropertyNames(ColoredTriangle));
// Array [ "aimepar", "prototype", "length", "name" ]
console.log("---","***","---");
if (ColoredTriangle.hasOwnProperty(prop)) {
console.log(`*** OWN PROP : ColoredTriangle.${prop} =
${ColoredTriangle[prop]}`);
}
// *** OWN PROP : ColoredTriangle.aimepar = 15
}
</script>
Exécution :
4 -> o test.html:191:6
5 -> l test.html:191:6
--- *** --- test.html:205:3
Itérateur–Générateur–Itérables -56/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
ColoredTriangle.aimepar = 15 test.html:221:1
obj.aimepar = undefined test.html:224:1
===> ownProperties de l'INSTANCE test.html:227:1
--- *** --- test.html:230:3
Mots-clés :
diasfb@mail2world.com
Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-La-
Creation
• https://www.scribd.com/document/377036251/Le-
Dosage-Des-Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-
Hasard-Des-Thermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/Petite-
Introduction-Aux-Fonctions-JavaScript
Itérateur–Générateur–Itérables -58/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
• https://www.scribd.com/document/376221919/La-Foi-
en-Jesus-Christ-Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuite-
visuelle-angulaire
• https://www.scribd.com/document/375349851/La-
variable-This
•
https://www.scribd.com/document/375024162/Fonctions-
Imbriquees-en-JS
• https://www.scribd.com/document/374789297/Format-
Interne-Des-Objets-JavaScript
•
https://www.scribd.com/document/374788758/Iterations-
en-JavaScript
• https://www.scribd.com/document/374738470/Le-Plus-
Grand-Secret-de-La-Creation
• https://www.scribd.com/document/374597969/Nouvelle-
Formule-d-IMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/Property-
Descriptors
• https://www.scribd.com/document/373833282/l-Objet-
Global-Window
•
https://www.scribd.com/document/372665249/Javascript-
Tome-II
• https://www.scribd.com/document/355291488/motilite-
oculaire-2
• https://www.scribd.com/document/355291239/motilite-
Itérateur–Générateur–Itérables -59/60- dimanche, 17.
mars 2019 (11:25 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-VI
oculaire-I
• https://www.scribd.com/document/355290248/Script-d-
Analyses-Des-Reflexes-Pupillomoteurs
•
https://www.scribd.com/document/321168468/Renseigne
ments-Id-et-Anthropometriques
•
https://www.scribd.com/document/320856721/Emission-
31-Jul-2016
•
https://www.scribd.com/document/318182982/Complicati
on-Visuelle-du-Traitement-de-La-Malaria
• https://www.scribd.com/document/318180637/Rapport-
Entre-Oxymetrie-Et-Type-Respiration
•
https://www.scribd.com/document/315746265/Classificati
on-Des-Medicaments
•
https://www.scribd.com/document/315745909/Incongruen
ces-Heresies-et-Heterodoxies-de-la-Notion-de-
Laboratoire
• https://www.scribd.com/document/315745725/Rapport-
Entre-Oxymetrie-Et-Type-Respiration