Penjana dalam JavaScript adalah jenis fungsi khas yang boleh dijeda dan disambung semula semasa pelaksanaannya. Mereka ditakrifkan menggunakan sintaks function*
dan gunakan kata kunci yield
untuk menjeda dan mengembalikan nilai. Penggunaan utama penjana adalah untuk membuat iterators, yang merupakan objek yang mewakili urutan nilai dan membolehkan traversal melalui urutan itu menggunakan kaedah next()
.
Untuk membuat iterator menggunakan penjana, anda menentukan fungsi penjana yang menggunakan yield
untuk menghasilkan urutan nilai. Apabila dipanggil, fungsi penjana mengembalikan objek iterator. Setiap kali kaedah next()
dipanggil pada pemalar ini, fungsi penjana menyambung semula pelaksanaannya sehingga mencapai pernyataan yield
seterusnya, mengembalikan objek dengan dua sifat: value
(nilai yang dihasilkan) dan done
(boolean yang menunjukkan sama ada pengarah telah selesai menghasilkan nilai).
Berikut adalah contoh mudah menggunakan penjana untuk membuat iterator:
<code class="javascript">function* simpleGenerator() { yield 1; yield 2; yield 3; } const iterator = simpleGenerator(); console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: 3, done: false } console.log(iterator.next()); // { value: undefined, done: true }</code>
Penjana menawarkan beberapa manfaat khusus apabila digunakan untuk membuat iterators di JavaScript:
yield
membolehkan ekspresi logik berulang yang lebih semula jadi.for...of
gelung, memudahkan penggunaan urutan yang boleh dimakan.Melaksanakan Iterator tersuai menggunakan penjana JavaScript berguna dalam pelbagai senario praktikal. Berikut adalah contoh penjana yang digunakan untuk melangkah ke atas urutan Fibonacci:
<code class="javascript">function* fibonacciGenerator() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, ab]; } } const fibonacciIterator = fibonacciGenerator(); console.log(fibonacciIterator.next().value); // 0 console.log(fibonacciIterator.next().value); // 1 console.log(fibonacciIterator.next().value); // 1 console.log(fibonacciIterator.next().value); // 2 console.log(fibonacciIterator.next().value); // 3</code>
Satu lagi senario praktikal adalah meleleh melalui dataset yang besar dengan memori terhad, seperti membaca garis fail yang besar mengikut baris:
<code class="javascript">function* fileLineGenerator(filePath) { const fs = require('fs'); const readline = require('readline'); const fileStream = fs.createReadStream(filePath); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); for await (const line of rl) { yield line; } } const lineIterator = fileLineGenerator('largeFile.txt'); // Use the iterator to process lines one by one for (const line of lineIterator) { console.log(line); }</code>
Sintaks dan ciri utama penjana dalam JavaScript yang menjadikannya berguna untuk penciptaan iterator termasuk:
Sintaks :
function*
, menunjukkan bahawa fungsi itu adalah penjana.yield
digunakan untuk menghasilkan nilai. yield
menjeda pelaksanaan fungsi dan mengembalikan nilai kepada pemanggil.Ciri -ciri utama :
next()
, yang menyambung semula penjana sehingga yield
seterusnya.yield
dan disambung semula dengan next()
membolehkan kawalan halus ke atas aliran penjana.return
untuk menentukan nilai akhir. Apabila penjana menemui pernyataan return
, ia menetapkan done
kepada true
dan termasuk nilai yang dikembalikan dalam harta value
objek hasil.async/await
untuk mengendalikan operasi tak segerak dalam kod yang lebih segerak.Berikut adalah contoh yang mempamerkan ciri -ciri ini:
<code class="javascript">function* generatorExample() { try { yield 'First value'; yield 'Second value'; return 'Final value'; } catch (error) { console.error('Error caught in generator:', error); } } const iterator = generatorExample(); console.log(iterator.next()); // { value: 'First value', done: false } console.log(iterator.next()); // { value: 'Second value', done: false } console.log(iterator.next()); // { value: 'Final value', done: true } console.log(iterator.next()); // { value: undefined, done: true }</code>
Sintaks dan ciri -ciri ini menjadikan Generators alat yang berkuasa untuk membuat dan menguruskan Iterators dalam JavaScript.
Atas ialah kandungan terperinci Apakah penjana dalam JavaScript, dan bagaimana mereka boleh digunakan untuk membuat iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!