Iterators dan Generators

Iterasi

Sebuah objek dapat dilakukan perulangan jika memiliki properti Symbol.iterator. Beberapa tipe bawaan seperti Array, Map, Set, String, Int32Array, Uint32Array, etc. sudah memiliki properti Symbol.iterator. Fungsi Symbol.iterator pada sebuah objek, bertanggungjawab untuk mengembalikan list nilai-nilai untuk menjalankan iterasi.

Pernyataan for..of

for..of mengulang objek yang dapat diulang dengan cara memanggil properti Symbol.iterator pada objek tersebut. Berikut ini loop for..of sederhana pada sebuah array:

ts
let someArray = [1, "string", false];
for (let entry of someArray) {
console.log(entry); // 1, "string", false
}

Pernyataan for..of vs for..in

Baik pernyataan for..of dan for..in akan mengiterasi list; yang membedakan antara keduanya adalah for..in akan mengembalikan daftar keys dari objek tersebut, sedangkan for..of mengembalikan daftar values properti numeric dari objek yang diiterasi.

Berikut adalah contoh implementasi dari perbedaan keduanya:

ts
let list = [4, 5, 6];
for (let i in list) {
console.log(i); // "0", "1", "2",
}
for (let i of list) {
console.log(i); // "4", "5", "6"
}

Perbedaan lainnya adalah for..in bekerja pada objek apapun; ini berfungsi sebagai cara untuk memeriksa properti pada objek tersebut. Di sisi lain, for..of tertarik pada nilai dari objek yang dapat diulang. Objek bawaan seperti Map danSet mengimplementasikan properti Symbol.iterator yang memungkinkan akses ke nilai yang disimpan.

ts
let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";
for (let pet in pets) {
console.log(pet); // "species"
}
for (let pet of pets) {
console.log(pet); // "Cat", "Dog", "Hamster"
}

Pembuatan kode

Menargetkan ES5 dan ES3

Ketika menargetkan ke engine ES5 atau ES3, iterator hanya membolehkan nilai bertipe Array. Akan terjadi galat jika for..of melakukan perulangan pada nilai yang bukan Array, bahkan jika nilai non Array tersebut memiliki properti Symbol.iterator.

Kompilator akan menghasilkan perulangan for sederhana untuk for..of, misalnya:

ts
let numbers = [1, 2, 3];
for (let num of numbers) {
console.log(num);
}

akan menghasilkan:

js
var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
var num = numbers[_i];
console.log(num);
}

Menargetkan ECMAScript 2015 dan yang lebih tinggi

Ketika menargetkan ke engine ECMAScript 2015, kompilator akan membuat perulangan for..of untuk menargetkan implementasi iterator bawaan di mesin.

The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request

Contributors to this page:
MHMohamed Hegazy  (57)
BDPBurhanudin Dwi Prakoso  (8)
GBGabriel Burdeti  (3)
OTOrta Therox  (2)
KSKevin Sanders  (1)
7+

Last updated: 23 Nov 2024