Menggunakan Iterator dan Generator pada JavaScript

Pernahkah Anda perlu untuk mengulang daftar, tetapi sistem operasinya menghabiskan banyak waktu untuk menyelesaikannya? Pernahkah Anda mengalami sebuah crash program karena sistem operasi menggunakan terlalu banyak memori? Hal ini tentunya terjadi pada beberapa orang ketika mencoba untuk mengimplementasikan fungsi yang dapat menghasilkan sebuah bilangan prima.

Menghasilkan sebuah bilangan prima hingga satu juta kali lebih banyak dibandingkan yang diinginkan. Tetapi menghasilkan angka hingga 10 juta tidaklah mungkin. Program saya biasanya akan crash atau hanya menggantung. Beberapa ada yang menggunakan saringan Eratosthenes, yang seharusnya lebih efisien dalam menghasilkan sebuah bilangan prima daripada pendekatan brute force.

Menggunakan Iterator dan Generator pada JavaScript

Jika Anda berada di dalam situasi yang sama, Anda dapat mencoba menggunakan sebuah algoritma yang berbeda. Ada sebuah algoritma pencarian dan algoritma penyortiran yang dapat bekerja lebih baik pada jumlah input yang lebih besar. Kelemahannya adalah algoritma tersebut mungkin akan lebih sulit untuk dipahami dengan cepat. Pilihan lainnya adalah dengan menggunakan sebuah bahasa pemrograman yang berbeda.

Bahasa yang biasanya dikompilasi mungkin dapat memproses beberapa kode secara signifikan dan juta lebih cepat. Tetapi menggunakan sebuah bahasa lain mungkin tidak praktis. Anda juga nantinya dapat mencoba menggunakan multiple thread. Sekali lagi, ini mungkin tidak praktis karena bahasa pemrograman Anda harus dapat mendukung ini.

Untungnya, dengan menggunakan bahasa pemrograman JavaScript, ada pilihan lain. Jika Anda memiliki sebuah tugas komputasi intensif, Anda dapat menggunakan sebuah iterator dan generator untuk mendapatkan beberapa efisiensi. Iterator ini adalah properti dari kumpulan JavaScript.

Iterator berfungsi untuk dapat meningkatkan efisiensi dengan memungkinkan Anda dapat mengonsumsi item yang ada di dalam daftar satu per satu seolah-olah itu adalah aliran. Generator adalah salah satu yang fungsi khusus untuk dapat menghentikan eksekusi. Menerapkan generator memungkinkan anda menghasilkan data satu potong sekaligus tanpa perlu menyimpan dalam daftar terlebih dahulu.

Iterator

Pertama-tama, mari kita tinjau berbagai macam cara yang dapat Anda lakukan agar mendapatkan sebuah perulangan melalui kumpulan dari bahasa JavaScript. Sebuah loop dari bentuk for nantinya akan menjalankan perintah-perintah dalam sistem tersebut beberapa kali. Demikian juga, perulangan jenis while nantinya akan menjalankan perintah di dalam tubuhnya selama kondisinya benar.

Anda dapat menggunakan perulangan tersebut untuk melintasi daftar dengan cara menaikkan variabel indeks pada setiap iterasi yang ada. Iterasi Sendiri adalah cara eksekusi dari tubuh perulangan. Perulangan ini tidak tahu tentang struktur daftar Anda. Mereka bertindak sebagai sebuah penghitung.

Perulangan for/in dan perulangan for/of biasanya akan dirancang untuk melakukan iterasi pada struktur data tertentu. Iterasi atas struktur data berarti Anda akan dapat melangkah melalui masing-masing elemennya. Perulangan for/in melakukan iterasi atas kunci dalam sebuah objek JavaScript yang sederhana. Perulangan for/of melakukan sebuah iterasi atas nilai-nilai iterable. Apa itu nilai iterable? Sederhananya, sebuah iterable adalah sebuah objek yang memiliki iterator. Contoh iterable sendiri adalah array dan set. Iterator adalah properti yang digunakan objek yang menyediakan sebuah mekanisme untuk melintasi objek.

Apa yang membuat iterator menjadi istimewa adalah bagaimana ia dapat melintasi suatu kumpulan data. Perulangan lain biasanya perlu memuat seluruh kumpulan data di depan untuk dapat mengulanginya, sedangkan iterator sendiri hanya perlu mengetahui posisi saat ada di dalam kumpulan data.

Anda nantinya akan dapat mengakses beberapa item saat ini dengan memanggil method iterator berikutnya. Metode selanjutnya tersebut nantinya akan dapat mengembalikan beberapa nilai item pada saat ini dan boolean untuk menunjukkan ketika Anda nantinya telah mencapai akhir dari kumpulan data. Berikut ini adalah beberapa contoh pembuatan iterator dengan array.

Anda juga dapat melakukan berbagai iterasi atas nilai-nilai iterator menggunakan perulangan for/of. Gunakan metode ini ketika Anda tahu Anda ingin mengakses semua item yang ada di dalam objek. Ini adalah bagaimana Anda akan menggunakan perulangan untuk iterasi melalui daftar sebelumnya:

Perlu Menggunakan Iterator

Mengapa Anda menggunakan iterator? Menggunakan iterator bermanfaat ketika biaya komputasi untuk memproses daftar menjadi lebih tinggi. Jika Anda memiliki sumber data yang sangat besar, ini dapat menyebabkan masalah di dalam program Anda jika Anda mencoba untuk mengulanginya karena seluruh kumpulan data tersebut harus dimuat.

Dengan iterator, Anda juga nantinya dapat memuat data dalam potongan. Ini lebih efisien karena Anda hanya perlu memanipulasi bagian daftar yang nantinya Anda butuhkan, tanpa mengeluarkan berbagai biaya tambahan untuk memproses seluruh daftar yang ada.

Contohnya adalah Anda memuat data dari file atau database, dan Anda kemudian anda ingin secara progresif menampilkan berbagai informasi yang ada di layar. Anda bisa membuat iterator dari data dan kemudian mengatur event handler untuk mengambil beberapa item yang ada di setiap kali peristiwa terjadi. Ini adalah contoh implementasi.

Jika Anda ingin membangun sebuah collection, Anda dapat melakukannya dengan menggunakan generator. Fungsi generator sendiri dapat mengembalikan nilai satu per satu dengan menghentikan sebuah eksekusi pada setiap iterasi. Saat Anda membuat sebuah instance dari generator, item ini nantinya dapat diakses menggunakan iterator. Ini adalah sintaks umum untuk membuat sebuah fungsi generator

Menandakan bahwa ini adalah fungsi dari sebuah generator. Kata kunci yield menghentikan fungsi dan kemudian menyuplai kondisi generator pada saat itu. Mengapa Anda nantinya harus menggunakan generator? Anda nantinya harus menggunakan sebuah generator jika anda ingin secara algoritma menghasilkan nilai dalam kumpulan data. Hal ini tentunya sangat berguna ketika anda memiliki kumpulan data yang sangat besar atau tidak terbatas. Mari kita lihat salah satu contoh untuk memahami bagaimana hal tersebut akan membantu anda.

Misalnya Anda memiliki sebuah game billiard online yang Anda buat, dan Anda ingin mencocokkan pemain dengan ruang permainan tersebut. Tujuan Anda adalah untuk menghasilkan beberapa cara yang dapat anda gunakan untuk memilih dua pemain berbeda dari daftar 2.000 gamer. Kombinasi dua pemain yang nantinya dihasilkan dari daftar [‘a’, ‘b’, ‘c’, ‘d’] adalah ab, ac, ad, bc, bd, cd. Ini adalah sebuah solusi menggunakan perulangan bersarang.

Generator

Sekarang coba jalankan fungsi tersebut dengan daftar 2.000 elemen. (Anda dapat menginisialisasi daftar yang nantinya Anda menggunakan perulangan untuk menambahkan angka 1 hingga dengan 2.000 ke array). Nantinya apa yang akan terjadi jika anda menjalankan kode anda tersebut ? Ketika saya menjalankan kode di editor online, yang ada di halaman web macet. Saat anda nantinya mencobanya di konsol di Chrome, anda dapat melihat hasil outputnya mencetak perlahan. Namun, CPU komputer anda nantinya sudah mulai bekerja dengan kondisi yang begitu berat, dan anda harus memaksa keluar dari Chrome. Ini adalah kode yang direvisi dengan menggunakan fungsi generator:

Biasanya, perulangan tersebut tidak terbatas akan merusak program Anda. Fungsi fibGen nantinya akan mampu berjalan selamanya karena tidak ada kondisi untuk berhenti. Tetapi karena ini adalah generator, Anda dapat mengontrol kapan setiap langkah yang nantinya akan dijalankan.

Demikian itulah cara kerja dan kegunaan Iterator dan Generator pada bahasa program javascript. Semoga artikel ini dapat membantu anda menyelesaikan beberapa kendala yang sering anda temui saat menggunakan sistem javascript.