JavaScript - Penjana Itera Sendiri: Panduan untuk Pemula

Hai sana, para ahli JavaScript masa depan! Hari ini, kita akan memulai sebuah perjalanan menarik ke dunia Penjana Itera Sendiri. Jangan khawatir jika Anda baru belajar programming; saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatu langkah demi langkah. Jadi, ambil secangkir kopi, dan mari kita masuk ke dalamnya!

JavaScript - User Defined Iterators

Apa Itu Itera?

Sebelum kita melompat ke dalam, mari kita mulai dari dasar. Bayangkan Anda punya sebuah kotak cokelat (yummy!). Penjana adalah seperti tangan ajaib yang membantu Anda mengambil satu cokelat pada saat yang sama, mencatat yang mana yang Anda sudah makan.

Dalam istilah JavaScript, penjana adalah objek yang menentukan metode next(), yang mengembalikan item berikutnya dalam urutan. Metode ini adalah kunci untuk keajaiban penjana!

Metode next(): Jantung Iterasi

Metode next() adalah tempat semua aksi terjadi. Itu seperti mesin mobil penjana kita. Mari kitauraikan:

Struktur next()

{
value: any,
done: boolean
}

Metode ini mengembalikan objek dengan dua properti:

  1. value: Nilai berikutnya dalam urutan.
  2. done: Boolean yang menunjukkan apakah urutan selesai.

mari kita lihat contohnya dengan sebuah contoh sederhana:

function simpleIterator() {
let count = 0;
return {
next: function() {
count++;
if (count <= 3) {
return { value: count, done: false };
}
return { value: undefined, done: true };
}
};
}

const iterator = simpleIterator();
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 }

Dalam contoh ini, penjana kita menghitung hingga 3. Setiap kali kita panggil next(), ia memberikan nomor berikutnya sampai kita mencapai akhir. Itu seperti mesin penghitung kecil!

Penjana Itera Sendiri: Membuat Magic Sendiri

Sekarang kita mengerti dasar-dasar, mari kita buat penjana sendiri. Bayangkan kita membuat daftar lagu kesukaan kita. Kita akan membuat penjana yang mengulangi lagu-lagu ini.

function playlistIterator(songs) {
let currentIndex = 0;

return {
next: function() {
if (currentIndex < songs.length) {
return {
value: songs[currentIndex++],
done: false
};
} else {
return { done: true };
}
}
};
}

const myPlaylist = ['Bohemian Rhapsody', 'Stairway to Heaven', 'Hotel California'];
const myMusicIterator = playlistIterator(myPlaylist);

console.log(myMusicIterator.next()); // { value: 'Bohemian Rhapsody', done: false }
console.log(myMusicIterator.next()); // { value: 'Stairway to Heaven', done: false }
console.log(myMusicIterator.next()); // { value: 'Hotel California', done: false }
console.log(myMusicIterator.next()); // { done: true }

Di sini, kita membuat playlistIterator yang mengulangi array lagu kita. Setiap kali kita panggil next(), ia memberikan lagu berikutnya sampai kita mendengarkan semuanya. Itu seperti memiliki DJ pribadi kita!

Membuat Objek Iterabel

Kita juga bisa membuat objek kita sendiri iterabel. Mari kita buat objek Book yang kita bisa iterasi melalui halamannya:

const Book = {
title: 'The Great Gatsby',
pages: ['It was the best of times...', 'Call me Ishmael...', 'The end.'],
[Symbol.iterator]: function() {
let pageIndex = 0;
return {
next: () => {
if (pageIndex < this.pages.length) {
return { value: this.pages[pageIndex++], done: false };
} else {
return { done: true };
}
}
};
}
};

for (let page of Book) {
console.log(page);
}

Contoh ini membuat objek Book yang kita bisa iterasi menggunakan loop for...of. Itu seperti berflipping melalui halaman buku!

Aplikasi Praktis: Dimana Kita Bisa Menggunakan Ini?

Penjana iterasi sendiri sangat berguna dalam banyak situasi:

  1. Struktur Data Khusus: Jika Anda membuat struktur data sendiri, Anda bisa tentukan bagaimana itu diulang.
  2. Evaluasi Malas: Generate nilai secara langsung daripada menyimpan semuanya dalam memori.
  3. Urutan Tak Terbatas: Buat penjana untuk urutan yang mungkin tak terbatas, seperti bilangan Fibonacci.

mari kita lihat contoh urutan Fibonacci tak terbatas:

function fibonacciIterator() {
let [prev, curr] = [0, 1];
return {
next: function() {
[prev, curr] = [curr, prev + curr];
return { value: prev, done: false };
}
};
}

const fib = fibonacciIterator();
console.log(fib.next().value); // 1
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2
console.log(fib.next().value); // 3
console.log(fib.next().value); // 5

Penjana ini akan terus generating bilangan Fibonacci selamanya! Itu seperti memiliki jinn matematika di perintah Anda.

Kesimpulan: Kuasa Iterasi

Penjana iterasi sendiri memberikan kita kekuatan untuk mengontrol bagaimana kita melintasi data. Mereka seperti alat buatan khusus yang membantu kita menavigasi kode dalam cara yang kita inginkan. Apakah Anda berflipping melalui halaman buku, mengulangi playlist, atau generating urutan matematika tak terbatas, penjana selalu ada untuk Anda!

Ingat, kunci untuk menguasai penjana adalah latihan. Cobalah membuat penjana Anda sendiri untuk berbagai situasi. Mungkin penjana untuk sebuah dek kartu, atau yang menggenerate bilangan prima. Kesempatan adalah tak terbatas!

Hati-hati coding, dan may your iterators always find the next value!

Credits: Image by storyset