1.1 Əsas anlayışlar
JavaScript-də iterators və iterables obyektlər (iterables) obyektlərin sırayla keçilməsi üçün istifadə olunan fundamental konseptlərdir. Bu konseptlər müasir JavaScript-də geniş şəkildə tətbiq olunur, xüsusilə for...of
dövrlərində, operator yayılması (spread operator), destruktivizasiya və digər çoxlu konstruksiyalarda. Bu mühazirədə iterables və iterators nədir, onların necə işlədiyini və onları necə yaratmaq və istifadə etməyi öyrənəcəyik.
Iterables (Iterables obyektlər)
Iterables obyektlər iterasiya protokolunu həyata keçirən obyektlərdir. Onların xüsusi [Symbol.iterator]
açarı ilə metodları olmalıdır ki, bu da iterator obyekt qaytarsın.
Iterators (Iterators)
Iterator — bu obyekt xüsusi next()
metoduna sahibdir və bu metod iki xüsusiyyətə malik obyekti qaytarır:
value
— ardıcıllığın növbəti elementinin dəyəridone
— ardıcıllığın tamamlandığını (true
) və ya tamamlanmadığını (false
) göstərən boolean dəyər
Nümunələrə nəzər salaq.
Daxili iterables obyektlər
JavaScript, massivlər, sətirlər, Set
və Map
obyektləri kimi bir neçə daxili iterables obyektlərə malikdir.
Nümunə 1: Massivin iterasiya edilməsi
const array = [1, 2, 3, 4, 5];
for (const item of array) {
console.log(item);
}
// Çap edəcək: 1 2 3 4 5
Nümunə 2: Sətirin iterasiya edilməsi
const string = 'hello';
for (const char of string) {
console.log(char);
}
// Çap edəcək: h e l l o
1.2 Öz iterátorlarını yaratmaq
Siz öz iterátorunuzu yarada bilərsiniz, iterasiya protokolunu həyata keçirməklə — next()
metodunu yaratmaqla.
Məsələn 1: Iteratora yaradılması
function createIterator(array) {
let index = 0;
return {
next: function() {
if (index < array.length) {
return { value: array[index++], done: false };
} else {
return { done: true };
}
}
};
}
const myIterator = createIterator([1, 2, 3]);
console.log(myIterator.next()); // { value: 1, done: false }
console.log(myIterator.next()); // { value: 2, done: false }
console.log(myIterator.next()); // { value: 3, done: false }
console.log(myIterator.next()); // { done: true }
Iterasiya olunan obyektlərin yaradılması
Bir obyektin iterasiya oluna bilməsi üçün o, [Symbol.iterator]
metodunu həyata keçirməlidir. Bəli, bu ad bir az qarışıqdır. Belə yaradıla bilər.
Məsələn 2: Iterasiya olunan obyektin yaradılması
const myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
};
for (const value of myIterable) {
console.log(value);
}
// Çap edəcək: 1 2 3
1.3 Daxili metodlar
Iterables obyektlərlə işləmək üçün daxili metodları və operatorları nəzərdən keçirək.
Nümunə 1: Spread operatoru
Spread operatoru (...
) iterables obyektləri kopyalamaq və ya birləşdirmək üçün istifadə oluna bilər.
const array = [1, 2, 3];
const newArray = [...array, 4, 5, 6];
console.log(newArray); // Çap edəcək: [1, 2, 3, 4, 5, 6]
Nümunə 2: Destrukturizasiya
Destrukturizasiya iterables obyektlərdən dəyərləri çıxarmağa imkan verir.
const [first, second, third] = [1, 2, 3];
console.log(first); // Çap edəcək: 1
console.log(second); // Çap edəcək: 2
console.log(third); // Çap edəcək: 3
Nümunə 3: Array.from və Array.of metodları
Array.from()
metodu iterables obyektlərdən array yaratmağa imkan verir.
const set = new Set([1, 2, 3, 4, 5]);
const array = Array.from(set);
console.log(array); // Çap edəcək: [1, 2, 3, 4, 5]
GO TO FULL VERSION