JavaScript-generaattorit

Tässä opetusohjelmassa opit JavaScript-generaattoreista esimerkkien avulla.

JavaScriptissä generaattorit tarjoavat uuden tavan toimia toimintojen ja iteraattorien kanssa.

Generaattorin avulla

  • voit lopettaa toiminnon suorittamisen mistä tahansa toiminnon sisältä
  • ja jatka koodin suorittamista pysäytetystä sijainnista

Luo JavaScript-generaattorit

Generaattorin luomiseksi sinun on ensin määritettävä generaattoritoiminto function*symbolilla. Generaattoritoimintojen objekteja kutsutaan generaattoreiksi.

 // define a generator function function* generator_function() (… ) // creating a generator const generator_obj = generator_function();

Huomaa : Generaattorin toiminto on merkitty *. Voit joko käyttää niitä function* generatorFunc() (… )tai function *generatorFunc()(… )luoda niitä.

Tuotto-ohjelman käyttö keskeyttää suoritus

Kuten edellä mainittiin, voit keskeyttää generaattoritoiminnon suorittamisen suorittamatta koko funktion runkoa. Tätä varten käytämme yieldavainsanaa. Esimerkiksi,

 // generator function function* generatorFunc() ( console.log("1. code before the first yield"); yield 100; console.log("2. code before the second yield"); yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next());

Tuotos

 1. koodi ennen ensimmäistä tuottoa (arvo: 100, valmis: väärä)

Tässä,

  • Nimi generaattoriobjekti generatorluodaan.
  • Kun generator.next()kutsutaan, koodi ensimmäiseen asti yieldsuoritetaan. Kun yieldkohtaat, ohjelma palauttaa arvon ja keskeyttää generaattoritoiminnon.

Huomaa : Sinun on määritettävä generaattorikohteet muuttujalle ennen sen käyttöä.

Useiden tuottolausekkeiden käsittely

yieldIlmaisu palauttaa arvon. Toisin kuin returnlause, se ei kuitenkaan lopeta ohjelmaa. Siksi voit jatkaa koodin suorittamista viimeksi tuotetusta paikasta. Esimerkiksi,

 function* generatorFunc() ( console.log("1. code before first yield"); yield 100; console.log("2. code before the second yield"); yield 200; console.log("3. code after the second yield"); ) const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next()); console.log(generator.next());

Tuotos

 1. koodi ennen ensimmäistä tuottoa (arvo: 100, valmis: väärä) 2. koodi ennen toista tuottoa (arvo: 200, tehty: väärä) (arvo: määrittelemätön, tehty: tosi)

Näin tämä ohjelma toimii.

  • Ensimmäinen generator.next()käsky suorittaa koodin ensimmäiseen tuottolausekkeeseen saakka ja keskeyttää ohjelman suorittamisen.
  • Toinen generator.next()käynnistää ohjelman taukotilasta.
  • Kun kaikkia elementtejä käytetään, se palaa (arvo: määrittelemätön, tehty: tosi).
Generaattoritoiminnon toiminta JavaScriptissä

Argumenttien välittäminen generaattoritoiminnoille

Voit myös välittää argumentteja generaattoritoiminnolle. Esimerkiksi,

 // generator function function* generatorFunc() ( // returns 'hello' at first next() let x = yield 'hello'; // returns passed argument on the second next() console.log(x); console.log('some code'); // returns 5 on second next() yield 5; ) const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next(6)); console.log(generator.next());

Tuotos

 (arvo: "hei", tehty: väärä) 6 jokin koodi (arvo: 5, tehty: väärä) (arvo: määrittelemätön, tehty: tosi)

Yllä olevassa ohjelmassa

  • Ensimmäinen generator.next()palauttaa arvon yield(tässä tapauksessa 'hei') arvon. Arvoa ei kuitenkaan ole määritetty muuttujalle xlet x = yield 'hello';
     (arvo: "hei", tehty: väärä)
  • Kun generator.next(6)kohtaat, koodi alkaa uudelleen kohdasta let x = yield 'hello';ja argumentti 6 osoitetaan x: lle. Myös jäljellä oleva koodi suoritetaan toiseen asti yield.
     6 jokin koodi (arvo: 5, tehty: väärä)
  • Kun kolmas next()on suoritettu, ohjelma palaa (arvo: määrittelemätön, valmis: tosi). Se johtuu siitä, että muita tuottolausekkeita ei ole.
     (arvo: määrittelemätön, tehty: tosi)

Generaattoreita käytetään itterablettien toteuttamiseen

Generaattorit tarjoavat helpomman tavan toteuttaa iteraattorit.

Jos haluat ottaa iteraattorin käyttöön manuaalisesti, sinun on luotava iteraattori next()menetelmällä ja tallennettava tila. Esimerkiksi,

 // creating iterable object const iterableObj = ( // iterator method (Symbol.iterator)() ( let step = 0; return ( next() ( step++; if (step === 1) ( return ( value: '1', done: false); ) else if (step === 2) ( return ( value: '2', done: false); ) else if (step === 3) ( return ( value: '3', done: false); ) return ( value: '', done: true ); ) ) ) ) for (const i of iterableObj) ( console.log(i); )

Tuotos

 1 2 3

Koska generaattorit ovat iteroivia, voit ottaa iteraattorin käyttöön helpommalla tavalla. Sitten voit toistaa generaattoreiden läpi for… ofsilmukan avulla. Esimerkiksi,

 // generator function function* generatorFunc() ( yield 1; yield 2; yield 3; ) const obj = generatorFunc(); // iteration through generator for (let value of obj) ( console.log(value); )

Generaattorimenetelmät

Menetelmä Kuvaus
next() Palauttaa tuottoarvon
return() Palauttaa arvon ja lopettaa generaattorin
throw() Heittää virheen ja sulkee generaattorin

JavaScript palauttaa Vs-tuoton avainsanan

palauta avainsana tuotto Avainsana
Palauttaa arvon ja lopettaa toiminnon. Palauttaa arvon ja keskeyttää toiminnon, mutta ei lopeta toimintoa.
Saatavana sekä normaalitoiminnoissa että generaattoritoiminnoissa. Saatavana vain generaattoritoiminnoissa.

JavaScript-generaattorin toiminto paluu

You can use the return statement in a generator function. The return statement returns a value and terminates the function (similar to regular functions). For example,

 // generator function function* generatorFunc() ( yield 100; return 123; console.log("2. some code before second yield"); yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next()); console.log(generator.next()); console.log(generator.next());

Output

 (value: 100, done: false) (value: 123, done: true) (value: undefined, done: true)

In the above program, when the return statement is encountered, it returns the value and done property becomes true, and the function terminates. Hence, the next() method after the return statement does not return anything.

Note: You can also use the return() method instead of the return statement like generator.return(123); in the above code.

JavaScript Generator Throw Method

Voit heittää virheen generaattoritoiminnolle käyttämällä heittää () -menetelmää. Menetelmän käyttö throw()heittää virheen ja lopettaa toiminnon. Esimerkiksi,

 // generator function function* generatorFunc() ( yield 100; yield 200; ) // returns generator object const generator = generatorFunc(); console.log(generator.next()); // throws an error // terminates the generator console.log(generator.throw(new Error('Error occurred.'))); console.log(generator.next());

Tuotos

 (arvo: 1, valmis: väärä) Virhe: Tapahtui virhe.

Generaattoreiden käyttö

  • Generaattorit antavat meille kirjoittaa puhtaampaa koodia kirjoittaessamme asynkronisia tehtäviä.
  • Generaattorit tarjoavat helpomman tavan toteuttaa iteraattorit.
  • Generaattorit suorittavat koodinsa vain tarvittaessa.
  • Generaattorit ovat muistitehokkaita.

Generaattorit esiteltiin ES6: ssa . Jotkin selaimet eivät ehkä tue generaattorien käyttöä. Jos haluat lisätietoja, käy JavaScript-generaattoreiden tuessa.

Mielenkiintoisia artikkeleita...