Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. JavaScript
Code

Menggunakan Iterator dan Generator pada JavaScript untuk Mengoptimalkan Kode

by
Difficulty:AdvancedLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article)

Pengenalan

Pernahkah Anda perlu mengulang daftar, tetapi operasinya menghabiskan banyak waktu untuk menyelesaikannya? Pernahkah Anda mengalami crash program karena operasi menggunakan terlalu banyak memori? Ini terjadi pada saya ketika saya mencoba mengimplementasikan fungsi yang menghasilkan bilangan prima.

Menghasilkan bilangan prima hingga satu juta kali lebih banyak daripada yang saya inginkan. Tetapi menghasilkan angka hingga 10 juta tidaklah mungkin. Program Saya akan crash atau hanya menggantung. Saya sudah menggunakan saringan Eratosthenes, yang seharusnya lebih efisien dalam menghasilkan bilangan prima daripada pendekatan brute force.

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

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

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

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

Iterator

Pertama-tama, mari kita tinjau berbagai cara yang dapat Anda lakukan perulangan melalui suatu kumpulan pada JavaScript. Sebuah loop dari bentuk for (initial; condition; step) { ... } akan menjalankan perintah-perintah dalam tubuhnya beberapa kali. Demikian pula, perulangan jenis while akan menjalankan perintah di dalam tubuhnya selama kondisinya benar.

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

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

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

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

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

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

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

Contohnya adalah Anda telah memuat data dari file atau database, dan Anda ingin secara progresif menampilkan informasi di layar. Anda bisa membuat iterator dari data dan mengatur event handler untuk mengambil beberapa item setiap kali peristiwa terjadi. Ini adalah contoh implementasi seperti apa yang mungkin akan terlihat:

Generator

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

* Menandakan bahwa ini adalah fungsi generator. Kata kunci yield menghentikan fungsi dan menyuplai kondisi generator pada saat itu. Mengapa Anda menggunakan generator? Anda akan menggunakan generator ketika Anda ingin secara algoritma menghasilkan nilai dalam kumpulan data. Ini sangat berguna jika Anda memiliki kumpulan data yang sangat besar atau tak terbatas. Mari kita lihat contoh untuk memahami bagaimana ini akan membantu kita.

Misalnya Anda memiliki game biliar online yang Anda buat, dan Anda ingin mencocokkan pemain dengan ruang permainan. Tujuan Anda adalah untuk menghasilkan semua cara Anda dapat memilih dua pemain berbeda dari daftar 2.000 gamer Anda. Kombinasi dua pemain yang dihasilkan dari daftar ['a', 'b', 'c', 'd'] adalah ab, ac, ad, bc, bd, cd. Ini adalah solusi menggunakan perulangan bersarang:

Sekarang coba jalankan fungsi dengan daftar 2.000 elemen. (Anda dapat menginisialisasi daftar Anda menggunakan perulangan untuk menambahkan angka 1 hingga 2.000 ke array). Apa yang terjadi sekarang ketika Anda menjalankan kode Anda?

Ketika saya menjalankan kode di editor online, halaman web macet. Saat saya mencobanya di konsol di Chrome, saya bisa melihat hasil outputnya mencetak perlahan. Namun, CPU komputer saya mulai bekerja dengan kondisi yang begitu berat, dan saya harus memaksa keluar dari Chrome. Ini adalah kode yang direvisi menggunakan fungsi generator:

Contoh lain adalah jika kita ingin menghasilkan angka dalam deret Fibonacci hingga tak terbatas. Berikut ini salah satu penerapannya:

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

Meninjau

Iterator dan generator berguna ketika Anda ingin memproses kumpulan data secara bertahap. Anda mendapatkan efisiensi dengan melacak keadaan kumpulan data, setidaknya semua item dalam kumpuluan data tersebut. Item dalam kumpulan data dievaluasi satu per satu, dan evaluasi sisa dari kumpulan data ditunda hingga nanti.

Iterator menyediakan cara yang efisien untuk melintasi dan memanipulasi daftar yang berjumlah besar. Generator menyediakan cara yang efisien untuk membuat daftar tersebut. Anda harus mencoba teknik ini ketika Anda akan menggunakan algoritma yang kompleks atau mengimplementasikan pemrograman paralel untuk mengoptimalkan kode Anda.

Jika Anda mencari sumber daya tambahan untuk dipelajari atau digunakan dalam pekerjaan Anda, periksa apa yang kami miliki di Envato Market.

Sumber lainnya

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.