Dərs 7 Başlanğıc səviyyə

JavaScript-də iterasiya

Dövrlərlə kodun təkrarlanmasını səmərəli şəkildə öyrənin

Nələri öyrənəcəksiniz

  • Kodun təkrarlanması üçün for dövrünü mənimsəyin
  • Şərtli iterasiya üçün while və do-while dövrlərini başa düşün
  • Dövr axınını idarə etmək üçün break və continue-dan istifadə etməyi öyrənin
  • Ümumi dövr səhvlərindən və tələlərdən qaçın

01 Iterasiya nədir?

Iterasiya kod blokunun bir neçə dəfə təkrarlanması prosesidir. JavaScript-də dövrlər iterasiyanı əldə etməyin əsas yoludur. Onlar müəyyən şərt ödənilənə qədər kodu təkrarlamağa imkan verir.

Real həyat analoquIterasiyanı paltaryuyan maşının dövrü kimi düşünün: o, paltarlar təmiz olana qədər eyni yuma prosesini bir neçə dəfə təkrarlayır. Eynilə, dövrlər şərt ödənilənə qədər kodu təkrarlayır.

JavaScript-də dövr növləri

JavaScript üç əsas dövr növü təqdim edir:

  • for dövrü - Təkrarların sayını əvvəlcədən bildiyiniz zaman ən yaxşısıdır
  • while dövrü - Təkrarların sayı naməlum olduqda ən yaxşısıdır
  • do-while dövrü - Kodu ən azı bir dəfə işlədiyinə zəmanət verir
Qabaqcıl dövrlərJavaScript həmçinin for...in (obyekt xassələrinin adları üzərində iterasiya edir) və for...of (massiv elementləri kimi iterasiya edilə bilən dəyərlər üzərində birbaşa iterasiya edir) təqdim edir. Bu dövrlər Iterable Protokol ilə işləyir və daha mürəkkəbdir. Biz onları orta səviyyə dərs "Qabaqcıl iterasiya"-da ətraflı əhatə edəcəyik.

02 For dövrü

For dövrü ən çox istifadə olunan dövr növüdür. Kodu tam olaraq neçə dəfə təkrarlamaq istədiyinizi bildiyiniz zaman mükəmməldir. Dövrün üç hissəsi var: başlanğıc, şərt və artırma.

Sintaksis

for (başlanğıc; şərt; artırma) { icra ediləcək kod }

javascript
// Əsas for dövrü
for (let i = 0; i < 5; i++) {
  console.log('Təkrarlama: ' + i);
}
// Nəticə:
// Təkrarlama: 0
// Təkrarlama: 1
// Təkrarlama: 2
// Təkrarlama: 3
// Təkrarlama: 4

// Hesablama üçün istifadə et
let sum = 0;
for (let i = 1; i <= 10; i++) {
  sum += i;
}
console.log('Cəm: ' + sum); // Nəticə: Cəm: 55

// Massiv üzərində iterasiya et
let fruits = ['alma', 'banan', 'albalı'];
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}
// Nəticə:
// alma
// banan
// albalı
For dövrünün hissələri:
1. Başlanğıc: Dövr başlamazdan əvvəl bir dəfə işləyir (let i = 0)
2. Şərt: Hər təkrarda yoxlanılır; şərt doğru olduqda dövr davam edir (i < 5)
3. Artırma: Hər təkrardan sonra işləyir (i++)

Müxtəlif dövr nümunələri

Müxtəlif davranışlar əldə etmək üçün for dövrləri ilə müxtəlif nümunələrdən istifadə edə bilərsiniz.

javascript
// Geri sayım
for (let i = 5; i > 0; i--) {
  console.log(i);
}
// Nəticə: 5, 4, 3, 2, 1

// 2-yə artırma
for (let i = 0; i <= 10; i += 2) {
  console.log(i);
}
// Nəticə: 0, 2, 4, 6, 8, 10

// Çoxlu dəyişənlər
for (let i = 0, j = 10; i < 5; i++, j--) {
  console.log('i: ' + i + ', j: ' + j);
}
// Nəticə:
// i: 0, j: 10
// i: 1, j: 9
// i: 2, j: 8
// i: 3, j: 7
// i: 4, j: 6

İç-içə dövrlər

Cədvəl, matris və ya iç-içə massivlər kimi çoxölçülü strukturlarla işləmək üçün dövrləri bir-birinin içərisinə yerləşdirə bilərsiniz.

javascript
// Vurma cədvəli
for (let i = 1; i <= 3; i++) {
  for (let j = 1; j <= 3; j++) {
    console.log(i + ' × ' + j + ' = ' + (i * j));
  }
  console.log('---');
}
// Nəticə:
// 1 × 1 = 1
// 1 × 2 = 2
// 1 × 3 = 3
// ---
// 2 × 1 = 2
// 2 × 2 = 4
// 2 × 3 = 6
// ---
// 3 × 1 = 3
// 3 × 2 = 6
// 3 × 3 = 9
// ---

💡 Performans məsləhəti: İç-içə dövrlər tez yavaşlaya bilər! n × m dövrü n*m təkrarlar icra edəcək. Böyük məlumat dəstləri ilə performansa diqqət yetirin.

For dövrlərindən nə vaxt istifadə etməli

  • Təkrarların dəqiq sayını bildiyiniz zaman
  • Massivlər və ya kolleksiyalar üzərində iterasiya edərkən
  • Sayğac dəyişəninə ehtiyacınız olduqda
  • İndeksli məlumat strukturları ilə işləyərkən

03 While dövrü

While dövrü şərt doğru olduqda kodu təkrarlayır. For dövründən fərqli olaraq, daxili sayğacı yoxdur. Əvvəlcədən neçə təkrara ehtiyacınız olacağını bilmədiyiniz zaman idealdır.

Sintaksis

while (şərt) { icra ediləcək kod }

javascript
// Əsas while dövrü
let count = 0;
while (count < 5) {
  console.log('Sayğac: ' + count);
  count++;
}
// Nəticə:
// Sayğac: 0
// Sayğac: 1
// Sayğac: 2
// Sayğac: 3
// Sayğac: 4

While və ya For: Hər birindən nə vaxt istifadə etməli

For dövründən istifadə edin:

  • Təkrarların sayını bildiyiniz zaman
  • İndekslərlə massiv üzərində iterasiya edərkən
  • Sayğac dəyişəninə ehtiyacınız olduqda
  • Əksər ümumi iterasiya ssenariləri üçün

While dövründən istifadə edin:

  • Təkrarların sayını bilmədiyiniz zaman
  • İstifadəçi girişi alınana qədər dövr edərkən
  • Şərt daha mürəkkəb və ya dinamik olduqda
  • Xarici hadisə və ya şərt gözləyərkən

04 Do-While dövrü

Do-while dövrü while-a bənzəyir, lakin vacib fərq var: şərt əvvəlcə yalan olsa belə, kod blokunu ən azı bir dəfə icra edir, çünki şərt yoxlaması dövrün sonunda baş verir.

Sintaksis

do { icra ediləcək kod } while (şərt);

javascript
// Əsas do-while
let count = 0;
do {
  console.log('Sayğac: ' + count);
  count++;
} while (count < 5);
// Nəticə:
// Sayğac: 0
// Sayğac: 1
// Sayğac: 2
// Sayğac: 3
// Sayğac: 4

// Vacib fərq: Ən azı bir dəfə icra olunur
let num = 10;
do {
  console.log('Bu göstəriləcək!');
  num++;
} while (num < 5);
// Nəticə: Bu göstəriləcək!
// (şərt əvvəlcə yalan olsa belə)

// Müqayisə: Adi while heç vaxt icra olunmur
let num2 = 10;
while (num2 < 5) {
  console.log('Bu heç vaxt göstərilməyəcək');
  num2++;
}
// Çıxış yoxdur (şərt əvvəlcə yalandır)
İstifadə yeriDo-while kod blokunun ən azı bir dəfə işlədiyinə zəmanət vermək istədiyiniz zaman idealdır.

Praktik nümunə: menyu sistemi

Do-while dövrləri menyunu ən azı bir dəfə göstərmək və istifadəçi çıxışı seçənə qədər davam etdirmək istədiyiniz zaman menyu sistemləri üçün mükəmməldir.

javascript
let choice;
do {
  console.log('--- Menyu ---');
  console.log('1. Başla');
  console.log('2. Parametrlər');
  console.log('3. Çıxış');

  // Təxmini: Real tətbiqdə istifadəçi seçimini alardınız
  choice = 2; // Seçimi simulyasiya etmək

  if (choice === 1) {
    console.log('Oyun başlayır...');
  } else if (choice === 2) {
    console.log('Parametrlər açılır...');
  } else if (choice === 3) {
    console.log('Sahib ol!');
  } else {
    console.log('Etibarsız seçim!');
  }
} while (choice !== 3);
// Menyu ən azı bir dəfə göstəriləcək

Do-while vs While

Əsas fərq şərtin nə vaxt yoxlanılmasıdır:

Do-while: Şərti sonunda yoxlayır, buna görə də kod ən azı bir dəfə işləyir

While: Şərti başlanğıcda yoxlayır, buna görə də kod heç vaxt işləməyə bilər

05 Break və continue

Break və continue dövrlərin normal axınını dəyişdirməyə imkan verən idarəetmə ifadələridir. Onlar dövrlərin nə vaxt dayandırılmalı və ya təkrarların atlanmalı olduğunu dəqiq idarə etməyə imkan verir.

Break ifadəsi

Break ifadəsi dövrü tamamilə dayandırır və dərhal ondan çıxır. İcra dövrün sonrasındakı kodla davam edir.

javascript
// müəyyən dəyər tapıldıqda break
for (let i = 0; i < 10; i++) {
  if (i === 5) {
    console.log('5 tapıldı! Dayandırılır.');
    break;
  }
  console.log(i);
}
// Nəticə: 0, 1, 2, 3, 4, "5 tapıldı! Dayandırılır."

// Massivdə axtarış
let numbers = [10, 23, 45, 67, 34, 89];
let target = 67;
let found = false;

for (let i = 0; i < numbers.length; i++) {
  if (numbers[i] === target) {
    console.log('İndeksdə tapıldı: ' + i);
    found = true;
    break; // Tapılsa dayandır
  }
}

if (!found) {
  console.log('Tapılmadı');
}
// Nəticə: İndeksdə tapıldı: 3

Ümumi istifadə yerləri:

  • Şərt ödənildikdə erkən çıxış
  • Kolleksiyada element axtarışı
  • Səhvlərin və ya etibarsız vəziyyətlərin idarə edilməsi

Continue ifadəsi

Continue ifadəsi cari təkrarın qalan hissəsini atlayır və dövrün növbəti təkrarına keçir. Dövrün özü işləməyə davam edir.

javascript
// Tək ədədləri atla
for (let i = 0; i < 10; i++) {
  if (i % 2 !== 0) {
    continue; // Tək ədədləri atla
  }
  console.log(i);
}
// Nəticə: 0, 2, 4, 6, 8 (yalnız cüt ədədlər)

// Müəyyən dəyərləri atla
let fruits = ['alma', 'banan', 'albalı', 'xurma', 'üzüm'];

for (let i = 0; i < fruits.length; i++) {
  if (fruits[i] === 'albalı') {
    continue;
  }
  console.log(fruits[i]);
}
// Nəticə: alma, banan, xurma, üzüm

// Yalnız müsbət ədədləri emal et
let nums = [5, -3, 8, -1, 12, 0, 7];
let sum = 0;

for (let i = 0; i < nums.length; i++) {
  if (nums[i] <= 0) {
    continue;
  }
  sum += nums[i];
}
console.log('Müsbət ədədlərin cəmi: ' + sum);
// Nəticə: Müsbət ədədlərin cəmi: 32

Ümumi istifadə yerləri:

  • Etibarsız və ya istənməyən dəyərləri atlamaq
  • Kolleksiyada yalnız müəyyən elementləri emal etmək
  • Lazımsız işi atlayaraq dövrləri optimallaşdırmaq
Break vs Continue:
Break: Dövrü tamamilə dayandırır və dərhal çıxır
Continue: Yalnız cari təkrarı atlayır, dövr davam edir

İç-içə dövrlərdə break və continue

Break və continue yalnız olduqları ən yaxın dövrə təsir edir. İç-içə dövrlərdən çıxmaq üçün etiketlərdən istifadə etmək lazım ola bilər (orta dərəcəli mövzu).

06 Ümumi səhvlər və onlardan necə qaçmaq

Dövrləri öyrənmək ümumi tələlərlə gəlir. Bu səhvləri başa düşmək daha yaxşı, daha etibarlı kod yazmağa kömək edəcək.

❌ Sonsuz dövrlər

Dövr dəyişənini yeniləməyi unutmaq proqramınızı dondura biləcək sonsuz dövr yaradır.

javascript
// ❌ Səhv - Sonsuz dövr!
let i = 0;
while (i < 5) {
  console.log(i);
  // i++ yoxdur - i heç vaxt artmır!
}

// ✅ Düzgün
let j = 0;
while (j < 5) {
  console.log(j);
  j++; // Dəyişəni yeniləyin!
}

// ❌ Səhv - Sonsuz dövr!
let k = 0;
for (k = 0; k > 0; k++) {
  console.log(k);
}
// Nəticə: 0, 1, 2, 3, 4 ...

// ✅ Düzgün
let l = 0;
for (l = 0; l < 5; l++) {
  console.log(l);
  l++; // Dəyişəni yeniləyin!
}
// Nəticə: 0, 1, 2, 3, 4

Vacib: Sonsuz dövrlərdən qaçınmaqDövrlərdə şərtin nə vaxtsa yalan olacağına əmin olmalısınız. Həmişə dövr gövdəsinin içərisində dövr dəyişənini yeniləyin, əks halda proqramınızı çökdürə biləcək sonsuz dövr yaradacaqsınız!

Həmişə dövr gövdəsinin içərisində dövr dəyişəninizin yeniləndiyinə əmin olun.

❌ Off-by-one səhvləri

Dövr sərhədlərində < və <= ilə səhvlər son elementi qaçırmağa və ya etibarsız indeksə daxil olmağa səbəb ola bilər.

javascript
let arr = [10, 20, 30];

// ❌ Səhv - Son element qaçırılıb
for (let i = 0; i < arr.length - 1; i++) {
  console.log(arr[i]);
}
// Nəticə: 10, 20 (30 atlandı)

// ✅ Düzgün
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

// ✅ Düzgün
for (let i = 0; i <= arr.length - 1; i++) {
  console.log(arr[i]);
}
// Nəticə: 10, 20, 30
Niyə bu baş verir:Massiv indeksləri 0-dan başlayır. 3 elementli massiv 0, 1, 2 indekslərinə malikdir. Length xassəsi (property) 3 qaytarır, lakin 3 indeksi mövcud deyil. Yuxarı hədd üçün həmişə arr.length istifadə edin və ya son indeksə ehtiyacınız varsa arr.length - 1.

Dövr şərtlərinizi iki dəfə yoxlayın.

❌ Iterasiya zamanı massivi dəyişdirmək

Massiv üzərində iterasiya edərkən ona elementlər əlavə etmək və ya silmək gözlənilməz davranışa səbəb ola bilər.

Massivi dəyişdirmək lazımdırsa, yeni massiv yaratmağı və ya geriyə iterasiya etməyi düşünün.

❌ Səhv dövr növündən istifadə etmək

Səhv dövr növünü seçmək kodu oxumağı və saxlamağı çətinləşdirə bilər.

Təkrarları bildiyiniz zaman for, bilmədiyiniz zaman while, ən azı bir icra lazım olduqda do-while istifadə edin.

Xülasə

Dövrlər kodu səmərəli şəkildə təkrarlamağa imkan verir. JavaScript for, while və do-while dövrlərini təqdim edir
For dövrləri təkrarların sayını bildiyiniz zaman ən yaxşısıdır. Onların başlanğıc, şərt və artırma hissələri var
While dövrləri təkrarlar naməlum olduqda idealdır. Sonsuz dövrlərdən qaçınmaq üçün həmişə şərtin yalan olacağına əmin olun
Do-while dövrləri ən azı bir dəfə icra olunur, bu onları menyu sistemləri və istifadəçi girişi yoxlaması üçün mükəmməl edir
Break dövrü tamamilə dayandırır, continue isə yalnız cari təkrarı atlayır
Ümumi səhvlərə sonsuz dövrlər, off-by-one səhvləri və iterasiya zamanı massivlərin dəyişdirilməsi daxildir

Təklifiniz var, səhv və ya xəta tapdınız? Zəhmət olmasa bizimlə əlaqə saxlayın.