Layaknya jalan ke Roma, Javascript juga memiliki beberapa jalan untuk melakukan iterasi. Beberapa yang umum kita temui antara lain for loop, while loop, dan do-while loop. Mari kita lihat contoh kasus iterasi terhadap sebuah array di bawah.
Ketiga cara klasik beriterasi tersebut seringkali sudah cukup untuk program kita. Tapi, ES6 membawa cara baru beriterasi yang cukup menarik: for-of. For-of LoopIterasi dengan for-of memiliki sintaks yang sangat ringkas dan bersih. Masih dengan contoh array 5 yang sama:
Ternyata, selain array, for-of loop ini bisa digunakan juga untuk iterasi terhadap objek-objek lain.
Selain array, ternyata sintaks iterasi yang menarik ini juga bisa diimplementasi terhadap objek String, Set dan Map. Kenapa begitu? Mari kita tengok apa kata MDN tentang for-of:
Ternyata terdapat klasifikasi objek bernama "iterable", di mana Array, String, Set dan Map tergabung di dalamnya. Jika Anda berasal dari bahasa pemrograman Java, mungkin Anda secara intuisi akan menebak bahwa iterable merujuk kepada suatu interface. Namun, Javascript tidak mengenal interface, yang dikenal Javascript adalah protokol, dan iterable ini adalah salah satu di antaranya. Protokol IterableProtokol di Javascript adalah konvensi yang harus dipenuhi suatu objek untuk dapat memanfaatkan fitur tertentu dari bahasa pemrograman Javascript. Konsep protokol diperkenalkan pada ES6 dengan protokol iterable dan iterator. Seperti yang sudah dipaparkan di atas, objek yang memenuhi protokol iterable dapat menggunakan kekuatan for-of. Untuk dapat dianggap iterable, sebuah objek (atau objek lain di rantai prototipenya) harus menerapkan metode @@iterator yaitu sebuah fungsi yang mengembalikan objek iterator. Fungsi tersebut harus disematkan pada properti 7 objek tersebut. Simbol tersebut adalah salah satu simbol built-in dari Javascript, spesifik untuk menunjuk ke metode @@iterator suatu objek.Kalau begitu, Array, String, Set dan Map semua punya metode iterator ya? Betul sekali!
Kita bisa mengimplementasi objek iterator kita sendiri dengan mengisi properti 2 dengan metode iterator.
Kita juga bisa loh meminjam metode iterator dari objek lain (dan memang faedah dari protokol ini salah satunya agar iterator dapat dipakai ulang).
Fungsi yang kita sematkan sebagai metode iterator ke objek kita tidak bisa sembarang fungsi, ia harus memenuhi protokol lain bernama protokol iterator. Protokol IteratorProtokol berikutnya yang akan kita eksplorasi adalah protokol iterator. Protokol iterator mengklasifikasi objek yang bisa menentukan perilaku iterasi suatu objek. Agar suatu objek dapat menjadi iterator, protokol ini mensyaratkan objek tersebut untuk mengimplementasi sebuah fungsi 3 yang:
Talk is confusing, show me the code:
Perhatikan bahwa iterator tersebut tidak akan pernah menghasilkan nilai 1 yang 6, artinya iterasi dengan iterator ini akan menjadi tidak terbatas alias infinite loop. Ya, itu dibolehkan.Sekarang mari kita coba iterator dengan perilaku lain dalam sebuah objek, katakanlah kita ingin iterator kita membuat genap semua angka ganjil di dalam array yang kita punya dengan mengalikannya dengan 2, sementara angka yang sudah genap dibiarkan.
Lalu, apakah menjadikan sebuah objek iterable hanya berguna untuk menggunakan for-loop? Tentu saja tidak, terdapat banyak lagi sintaks Javascript yang mengonsumsi iterable.
Lalu, Apa Keuntungan Menggunakan Iterable?Yang pertama, seperti yang kita lihat di atas, iterable membuat kita dapat menggunakan beberapa fitur native yang dimiliki Javascript. Selain itu:
Sekian ulasan tentang iterable dan iterator, semoga dapat membantu iterasi Anda ke depannya. Sebenarnya ada satu lagi bahasan terkait, yaitu generator yang merupakan factory dari iterator, tapi karena sudah terlalu panjang akan saya pisahkan menjadi tulisan tersendiri. Tunggu tanggal mainnya ya! |